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;