diff options
author | Akim Demaille <demaille@gostai.com> | 2008-09-01 11:39:41 +0200 |
---|---|---|
committer | Akim Demaille <demaille@gostai.com> | 2008-11-13 07:04:47 +0100 |
commit | 3204049e31e71c30d0dddf7cae8738c289dbd104 (patch) | |
tree | 03401ebdc2eb0b5090e0e9d71a23e64276536db3 | |
parent | 202598d3ab40e58385028c842ff79a680e79bbe8 (diff) | |
download | bison-3204049e31e71c30d0dddf7cae8738c289dbd104.tar.gz |
Compute at M4 time some of the subtractions.
* data/lalr1.cc (b4_substract): New.
(b4_rhs_data): Use it.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | data/lalr1.cc | 11 |
2 files changed, 16 insertions, 1 deletions
@@ -1,5 +1,11 @@ 2008-11-13 Akim Demaille <demaille@gostai.com> + Compute at M4 time some of the subtractions. + * data/lalr1.cc (b4_substract): New. + (b4_rhs_data): Use it. + +2008-11-13 Akim Demaille <demaille@gostai.com> + symbol::token. This is allows the user to get the type of a token return by yylex. diff --git a/data/lalr1.cc b/data/lalr1.cc index 15a42580..97ba371b 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -18,6 +18,15 @@ m4_include(b4_pkgdatadir/[c++.m4]) +# b4_subtract(LHS, RHS) +# --------------------- +# Evaluate LHS - RHS if they are integer literals, otherwise expand +# to (LHS) - (RHS). +m4_define([b4_subtract], +[m4_bmatch([$1$2], [^[0123456789]*$], + [m4_eval([$1 - $2])], + [($1) - ($2)])]) + # b4_args(ARG1, ...) # _b4_args(ARG1, ...) @@ -107,7 +116,7 @@ m4_define([b4_lhs_location], # Return the data corresponding to the symbol #NUM, where the current # rule has RULE-LENGTH symbols on RHS. m4_define([b4_rhs_data], - [yystack_@{($1) - ($2)@}]) + [yystack_@{b4_subtract($@)@}]) # b4_rhs_state(RULE-LENGTH, NUM) |