Mercurial > hg > octave-nkf
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 +++ b/libinterp/parse-tree/lex.ll @@ -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); + } + } } %{