Mercurial > octave-nkf
diff libinterp/parse-tree/lex.ll @ 18233:af8a70d6885c gui-release
improve command parsing
* lex.ll (COMMAND_START): Now exclusive.
Make all debug strings match patterns for COMMAND_START patterns.
(<COMMAND_START>[\(\[\{]*): Match zero or more, not one or more.
(<COMMAND_START>[\)\]\}]*): Likewise.
(<COMMAND_START>{S}*): Likewise.
(<COMMAND_START>([\.]|[^#% \t\r\n\.\,\;\"\'\(\[\{\}\]\)]*): Likewise.
* command.tst: New file.
author | Michael C. Grant <mcg@cvxr.com> |
---|---|
date | Tue, 07 Jan 2014 13:33:39 -0500 |
parents | 2eb26867bf66 |
children | 8f256148d82b 043ce3787849 |
line wrap: on
line diff
--- a/libinterp/parse-tree/lex.ll Tue Jan 07 13:19:54 2014 -0500 +++ b/libinterp/parse-tree/lex.ll Tue Jan 07 13:33:39 2014 -0500 @@ -43,7 +43,7 @@ } -%s COMMAND_START +%x COMMAND_START %s MATRIX_START %x INPUT_FILE_START @@ -325,7 +325,7 @@ %} <COMMAND_START>({CCHAR}[^\r\n]*)?{NL} { - curr_lexer->lexer_debug ("<COMMAND_START>({CCHAR}[^\\r\\n]*)?{NL}"); + curr_lexer->lexer_debug ("<COMMAND_START>({CCHAR}[^\\r\\n])?{NL}"); COMMAND_ARG_FINISH; @@ -339,7 +339,7 @@ } <COMMAND_START>[\,\;] { - curr_lexer->lexer_debug( "<COMMAND_START>[\\,\\;]" ); + curr_lexer->lexer_debug ("<COMMAND_START>[\\,\\;]"); if (yytext[0] != ',' || curr_lexer->command_arg_paren_count == 0) { @@ -361,7 +361,7 @@ // be slurped into that argument as well. %} -<COMMAND_START>[\(\[\{]+ { +<COMMAND_START>[\(\[\{]* { curr_lexer->lexer_debug ("<COMMAND_START>[\\(\\[\\{]+"); curr_lexer->command_arg_paren_count += yyleng; @@ -369,7 +369,7 @@ curr_lexer->current_input_column += yyleng; } -<COMMAND_START>[\)\]\}]+ { +<COMMAND_START>[\)\]\}]* { curr_lexer->lexer_debug ("<COMMAND_START>[\\)\\]\\}]+"); curr_lexer->command_arg_paren_count -= yyleng; @@ -407,8 +407,8 @@ // incorporated into the argument. %} -<COMMAND_START>{S}+ { - curr_lexer->lexer_debug ("<COMMAND_START>{S}+"); +<COMMAND_START>{S}* { + curr_lexer->lexer_debug ("<COMMAND_START>{S}*"); if (curr_lexer->command_arg_paren_count == 0) COMMAND_ARG_FINISH; @@ -422,8 +422,8 @@ // Everything else is slurped into the command arguments. %} -<COMMAND_START>(\.|[^#% \t\r\n\.\,\;\"\'\(\[\{\}\]\)]+) { - curr_lexer->lexer_debug ("<COMMAND_START>(\\.|[^#% \\t\\r\\n\\.\\,\\;\\\"\\'\\(\\[\\{\\}\\]\\)]+)"); +<COMMAND_START>([\.]|[^#% \t\r\n\.\,\;\"\'\(\[\{\}\]\)]*) { + curr_lexer->lexer_debug ("<COMMAND_START>([\.]|[^#% \\t\\r\n\\.\\,\\;\\\"\\'\\(\\[\\{\\}\\]\\)]*"); curr_lexer->string_text += yytext; curr_lexer->current_input_column += yyleng;