Mercurial > hg > octave-lyh
comparison libinterp/parse-tree/oct-parse.yy @ 16167:22bb3aa9f025
make push parser interface partially work
* oct-parse.yy: Use USE_OCTAVE_PUSH_PARSER, not USE_PUSH_PARSER.
(octave_parser::~octave_parser): Cast parser state to yypstate*.
(octave_parser::run): Simplify. If USE_OCTAVE_PUSH_PARSER, use push
parser interface, but still require that the lexer is in charge of
gathering input.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 01 Mar 2013 07:18:18 -0500 |
parents | c5bfdc4c0963 |
children |
comparison
equal
deleted
inserted
replaced
16166:cb80b1d062b1 | 16167:22bb3aa9f025 |
---|---|
1480 curr_parser->bison_error (s); | 1480 curr_parser->bison_error (s); |
1481 } | 1481 } |
1482 | 1482 |
1483 octave_parser::~octave_parser (void) | 1483 octave_parser::~octave_parser (void) |
1484 { | 1484 { |
1485 #if defined (USE_PUSH_PARSER) | 1485 #if defined (OCTAVE_USE_PUSH_PARSER) |
1486 yypstate_delete (parser_state); | 1486 yypstate_delete (static_cast<yypstate *> (parser_state)); |
1487 #endif | 1487 #endif |
1488 | 1488 |
1489 delete curr_lexer; | 1489 delete curr_lexer; |
1490 } | 1490 } |
1491 void octave_parser::init (void) | 1491 void octave_parser::init (void) |
1492 { | 1492 { |
1493 #if defined (USE_PUSH_PARSER) | 1493 #if defined (OCTAVE_USE_PUSH_PARSER) |
1494 parser_state = yypstate_new (); | 1494 parser_state = yypstate_new (); |
1495 #endif | 1495 #endif |
1496 | 1496 |
1497 CURR_LEXER = curr_lexer; | 1497 CURR_LEXER = curr_lexer; |
1498 } | 1498 } |
1500 int | 1500 int |
1501 octave_parser::run (void) | 1501 octave_parser::run (void) |
1502 { | 1502 { |
1503 int status = 0; | 1503 int status = 0; |
1504 | 1504 |
1505 #if defined (USE_PUSH_PARSER) | 1505 #if defined (OCTAVE_USE_PUSH_PARSER) |
1506 | 1506 |
1507 for (;;) | 1507 do |
1508 { | 1508 { |
1509 unwind_protect frame; | 1509 YYSTYPE lval; |
1510 | 1510 |
1511 frame.protect_var (current_input_line); | 1511 int token = octave_lex (&lval, scanner); |
1512 | 1512 |
1513 bool eof = false; | 1513 yypstate *pstate = static_cast<yypstate *> (parser_state); |
1514 | 1514 |
1515 get_user_input (eof); | 1515 status = octave_push_parse (pstate, token, &lval, this); |
1516 | 1516 } |
1517 do | 1517 while (status == YYPUSH_MORE); |
1518 { | |
1519 octave_char = eof ? END_OF_INPUT : octave_lex (); | |
1520 | |
1521 if (octave_char == 0) | |
1522 { | |
1523 // Attempt to get more input. | |
1524 status = -1; | |
1525 break; | |
1526 } | |
1527 | |
1528 status = octave_push_parse (pstate); | |
1529 } | |
1530 while (status == YYPUSH_MORE); | |
1531 | |
1532 if (status >= 0) | |
1533 break; | |
1534 } | |
1535 | 1518 |
1536 #else | 1519 #else |
1537 | 1520 |
1538 status = octave_parse (this); | 1521 status = octave_parse (this); |
1539 | 1522 |