[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Let yytranslate handle the eof case.
From: |
Akim Demaille |
Subject: |
[PATCH] Let yytranslate handle the eof case. |
Date: |
Tue, 11 Nov 2008 14:33:16 -0000 |
* data/lalr1.cc (yytranslate_): Handle the EOF case.
Adjust callers.
No longer expect yychar to be equal to yyeof_, rather, test the
lookahead's (translated) kind.
---
ChangeLog | 8 ++++++++
data/lalr1.cc | 23 ++++++++++-------------
2 files changed, 18 insertions(+), 13 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e8e8ac2..7ce96d1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2008-11-11 Akim Demaille <address@hidden>
+ Let yytranslate handle the eof case.
+ * data/lalr1.cc (yytranslate_): Handle the EOF case.
+ Adjust callers.
+ No longer expect yychar to be equal to yyeof_, rather, test the
+ lookahead's (translated) kind.
+
+2008-11-11 Akim Demaille <address@hidden>
+
yychar cannot be empty in yyerrlab.
* TODO (yychar == yyempty_): New.
* data/lalr1.cc: Remove the handling of this case.
diff --git a/data/lalr1.cc b/data/lalr1.cc
index 8c5b334..2a0a5f2 100644
--- a/data/lalr1.cc
+++ b/data/lalr1.cc
@@ -1149,19 +1149,14 @@ m4_popdef([b4_at_dollar])])dnl
[[YYSTYPE*], [&yyla.value]][]dnl
b4_locations_if([, [[location*], [&yyla.location]]])dnl
m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
+ // Convert token to internal form.
+ yyla.type = yytranslate_ (yychar);
+ // Beware that yylex may return -2 to mean EOF, but which
+ // turns out to the be value of YYEMPTY.
+ yychar = !yyempty_;
}
- /* Convert token to internal form. */
- if (yychar <= yyeof_)
- {
- yychar = yyla.type = yyeof_;
- YYCDEBUG << "Now at end of input." << std::endl;
- }
- else
- {
- yyla.type = yytranslate_ (yychar);
- YY_SYMBOL_PRINT ("Next token is", yyla);
- }
+ YY_SYMBOL_PRINT ("Next token is", yyla);
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
@@ -1284,7 +1279,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
error, discard it. */
/* Return failure if at end of input. */
- if (yychar == yyeof_)
+ if (yyla.type == yyeof_)
YYABORT;
else
{]b4_assert_if([
@@ -1536,7 +1531,9 @@ b4_error_verbose_if([ tok])[)
const unsigned int user_token_number_max_ = ]b4_user_token_number_max[;
const token_number_type undef_token_ = ]b4_undef_token_number[;
- if (static_cast<unsigned int> (t) <= user_token_number_max_)
+ if (t <= yyeof_)
+ return yyeof_;
+ else if (static_cast<unsigned int> (t) <= user_token_number_max_)
return translate_table[t];
else
return undef_token_;
--
1.6.0.2.588.g3102
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Let yytranslate handle the eof case.,
Akim Demaille <=