diff options
Diffstat (limited to 'parsing/parse.sh')
-rw-r--r-- | parsing/parse.sh | 45 |
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 |