changeset 16361:e1dcd834751f

and foo NUMBER as command syntax (bug #38565) * lex.ll ({NUMBER}{Im}, {D}+/\.[\*/\\^\']|{NUMBER}): Handle possible command syntax.
author John W. Eaton <jwe@octave.org>
date Sat, 23 Mar 2013 15:29:15 -0400
parents 11115c237231
children b9e510a1f308
files libinterp/parse-tree/lex.ll
diffstat 1 files changed, 42 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/parse-tree/lex.ll	Sat Mar 23 15:02:29 2013 -0400
+++ b/libinterp/parse-tree/lex.ll	Sat Mar 23 15:29:15 2013 -0400
@@ -564,20 +564,29 @@
 {NUMBER}{Im} {
     curr_lexer->lexer_debug ("{NUMBER}{Im}");
 
-    int tok = curr_lexer->previous_token_value ();
-
-    if (curr_lexer->whitespace_is_significant ()
-        && curr_lexer->space_follows_previous_token ()
-        && ! (tok == '[' || tok == '{'
-              || curr_lexer->previous_token_is_binop ()))
+    if (curr_lexer->previous_token_may_be_command ()
+        &&  curr_lexer->space_follows_previous_token ())
       {
         yyless (0);
-        unput (',');
+        curr_lexer->push_start_state (COMMAND_START);
       }
     else
       {
-        curr_lexer->handle_number ();
-        return curr_lexer->count_token_internal (IMAG_NUM);
+        int tok = curr_lexer->previous_token_value ();
+
+        if (curr_lexer->whitespace_is_significant ()
+            && curr_lexer->space_follows_previous_token ()
+            && ! (tok == '[' || tok == '{'
+                  || curr_lexer->previous_token_is_binop ()))
+          {
+            yyless (0);
+            unput (',');
+          }
+        else
+          {
+            curr_lexer->handle_number ();
+            return curr_lexer->count_token_internal (IMAG_NUM);
+          }
       }
   }
 
@@ -590,21 +599,30 @@
 {NUMBER} {
     curr_lexer->lexer_debug ("{D}+/\\.[\\*/\\^\\']|{NUMBER}");
 
-     int tok = curr_lexer->previous_token_value ();
-
-     if (curr_lexer->whitespace_is_significant ()
-         && curr_lexer->space_follows_previous_token ()
-         && ! (tok == '[' || tok == '{'
-               || curr_lexer->previous_token_is_binop ()))
-       {
-         yyless (0);
-         unput (',');
-       }
-     else
-       {
-         curr_lexer->handle_number ();
-         return curr_lexer->count_token_internal (NUM);
-       }
+    if (curr_lexer->previous_token_may_be_command ()
+        &&  curr_lexer->space_follows_previous_token ())
+      {
+        yyless (0);
+        curr_lexer->push_start_state (COMMAND_START);
+      }
+    else
+      {
+        int tok = curr_lexer->previous_token_value ();
+
+        if (curr_lexer->whitespace_is_significant ()
+            && curr_lexer->space_follows_previous_token ()
+            && ! (tok == '[' || tok == '{'
+                  || curr_lexer->previous_token_is_binop ()))
+          {
+            yyless (0);
+            unput (',');
+          }
+        else
+          {
+            curr_lexer->handle_number ();
+            return curr_lexer->count_token_internal (NUM);
+          }
+      }
   }
 
 %{