summaryrefslogtreecommitdiffstats
path: root/parsing/parse.sh
diff options
context:
space:
mode:
Diffstat (limited to 'parsing/parse.sh')
-rw-r--r--parsing/parse.sh45
1 files changed, 4 insertions, 41 deletions
diff --git a/parsing/parse.sh b/parsing/parse.sh
index d9fb6a1..196ad84 100644
--- a/parsing/parse.sh
+++ b/parsing/parse.sh
@@ -5,10 +5,11 @@ ETX="$(printf '\003.')"; ETX="${ETX%.}"
RS="$(printf '\036.')"; RS="${RS%.}"
US="$(printf '\037.')"; US="${US%.}"
+dbg=true
+dbg=false
+
dbg()
{
- dbg=true
- dbg=false
if ${dbg}; then
printf 'DEBUG: %s\n' "${@}" >&2
fi
@@ -583,50 +584,12 @@ sequential_sep()
return 1
}
-# Maybe parse() should just tell the lexer what the starting production (parser
-# entry point) is.
-parse_sub()
-{
- local fn="${1}"
- local ln="${2}"
- local lexer_char="${3}"
- local complete="${4}"
- shift 3
-
- init_lexer "${fn}" ${ln} "${lexer_char}"
-
- # If this returns (does not exit), there are no errors.
- complete_command
- if ${complete} && ! accept T_EOF; then
- synexp ''
- fi
- if ! ${complete}; then
- case "${tok%${US}*}" in
- T_RPAREN)
- ;;
- *)
- synerr 'Missing ")"'
- ;;
- esac
- fi
-
- get_lineno
- printf '%c' "${RS}"
- get_lexer_char
- printf '%c' "${RS}"
- get_tokens
-
- return 0
-}
-
parse()
{
local fn="${1}"
shift 1
- local toks=
- if toks="$(parse_sub "${fn}" 1 '' true)"; then
- printf '%s\n' "${toks#*${RS}*${RS}}"
+ if run_lexer "${fn}" complete_command; then
return 0
fi
return 1