Mercurial > hg > octave-lojdl
changeset 1091:54abf1b3a8e9
[project @ 1995-02-02 00:30:14 by jwe]
author | jwe |
---|---|
date | Thu, 02 Feb 1995 00:30:14 +0000 |
parents | d5b0d11e3200 |
children | 2e10146f7f72 |
files | src/lex.l src/parse.y |
diffstat | 2 files changed, 28 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lex.l +++ b/src/lex.l @@ -121,8 +121,8 @@ static int handle_string (char delim, int text_style = 0); static int handle_close_brace (int spc_gobbled); static int handle_identifier (char *tok, int spc_gobbled); -static int have_continuation (void); -static int have_ellipsis_continuation (void); +static int have_continuation (int trailing_comments_ok = 1); +static int have_ellipsis_continuation (int trailing_comments_ok = 1); static int eat_whitespace (void); static int eat_continuation (void); @@ -1460,7 +1460,7 @@ // characters, return 0. Otherwise, return 1. static int -have_continuation (void) +have_continuation (int trailing_comments_ok) { ostrstream buf; @@ -1478,7 +1478,10 @@ case '%': case '#': - in_comment = 1; + if (trailing_comments_ok) + in_comment = 1; + else + goto cleanup; break; case '\n': @@ -1487,26 +1490,25 @@ return 1; default: - if (in_comment) - break; - else - { - buf << ends; - char *s = buf.str (); - if (s) - { - int len = strlen (s); - while (len--) - yyunput (s[len], yytext); - } - delete [] s; - return 0; - } + if (! in_comment) + goto cleanup; + break; } } yyunput (c, yytext); + return 0; + cleanup: + buf << ends; + char *s = buf.str (); + if (s) + { + int len = strlen (s); + while (len--) + yyunput (s[len], yytext); + } + delete [] s; return 0; } @@ -1515,13 +1517,13 @@ // line character. static int -have_ellipsis_continuation (void) +have_ellipsis_continuation (int trailing_comments_ok) { char c1 = yyinput (); if (c1 == '.') { char c2 = yyinput (); - if (c2 == '.' && have_continuation ()) + if (c2 == '.' && have_continuation (trailing_comments_ok)) return 1; else { @@ -1575,7 +1577,7 @@ } else { - if (have_continuation ()) + if (have_continuation (0)) escape_pending = 0; else { @@ -1587,7 +1589,7 @@ } else if (c == '.') { - if (! have_ellipsis_continuation ()) + if (! have_ellipsis_continuation (0)) buf << (char) c; } else if (c == '\n')
--- a/src/parse.y +++ b/src/parse.y @@ -300,15 +300,9 @@ YYABORT; } | simple_list parse_error - { - yyerror ("parse error"); - ABORT_PARSE; - } + { ABORT_PARSE; } | parse_error - { - yyerror ("parse error"); - ABORT_PARSE; - } + { ABORT_PARSE; } ; input1 : '\n' @@ -322,6 +316,7 @@ ; parse_error : LEXICAL_ERROR + { yyerror ("parse error"); } | error ;