d: support api.symbol.prefix and api.token.prefix

The D skeleton was not properly supporting them.

* data/skeletons/d.m4, data/skeletons/lalr1.d: Fix it.
* tests/calc.at: Check it.
This commit is contained in:
Adela Vais
2020-09-28 15:30:11 +03:00
committed by Akim Demaille
parent 9b18cac96b
commit 2e5592b3ab
3 changed files with 22 additions and 20 deletions

View File

@@ -186,7 +186,7 @@ m4_define([b4_token_enum],
m4_define([b4_token_enums], m4_define([b4_token_enums],
[/* Token kinds. */ [/* Token kinds. */
public enum TokenKind { public enum TokenKind {
]b4_symbol_kind([-2])[ = -2, ]b4_symbol(-2, id)[ = -2,
b4_symbol_foreach([b4_token_enum])dnl b4_symbol_foreach([b4_token_enum])dnl
} }
]) ])

View File

@@ -394,7 +394,7 @@ b4_locations_if([, ref ]b4_location_type[ yylocationp])[)
public bool parse () public bool parse ()
{ {
// Lookahead token kind. // Lookahead token kind.
int yychar = TokenKind.YYEMPTY; int yychar = TokenKind.]b4_symbol(-2, id)[;
// Lookahead symbol kind. // Lookahead symbol kind.
SymbolKind yytoken = ]b4_symbol(-2, kind)[; SymbolKind yytoken = ]b4_symbol(-2, kind)[;
@@ -459,7 +459,7 @@ m4_popdef([b4_at_dollar])])dnl
} }
/* Read a lookahead token. */ /* Read a lookahead token. */
if (yychar == TokenKind.YYEMPTY) if (yychar == TokenKind.]b4_symbol(-2, id)[)
{]b4_parse_trace_if([[ {]b4_parse_trace_if([[
yycdebugln ("Reading a token");]])[ yycdebugln ("Reading a token");]])[
yychar = yylex ();]b4_locations_if([[ yychar = yylex ();]b4_locations_if([[
@@ -511,7 +511,7 @@ m4_popdef([b4_at_dollar])])dnl
yy_symbol_print ("Shifting", yytoken, yylval]b4_locations_if([, yylloc])[);]])[ yy_symbol_print ("Shifting", yytoken, yylval]b4_locations_if([, yylloc])[);]])[
/* Discard the token being shifted. */ /* Discard the token being shifted. */
yychar = TokenKind.YYEMPTY; yychar = TokenKind.]b4_symbol(-2, id)[;
/* Count tokens shifted since error; after three, turn off error /* Count tokens shifted since error; after three, turn off error
* status. */ * status. */
@@ -571,7 +571,7 @@ m4_popdef([b4_at_dollar])])dnl
return false; return false;
} }
else else
yychar = TokenKind.YYEMPTY; yychar = TokenKind.]b4_symbol(-2, id)[;
} }
/* Else will try to reuse lookahead token after shifting the error /* Else will try to reuse lookahead token after shifting the error

View File

@@ -606,13 +606,13 @@ class CalcLexer(R) : Lexer
// EOF. // EOF.
if (input.empty) if (input.empty)
return TokenKind.CALC_EOF; return TokenKind.]AT_TOKEN_PREFIX[CALC_EOF;
// Numbers. // Numbers.
if (input.front.isNumber) if (input.front.isNumber)
{ {
semanticVal_.ival = parseInt; semanticVal_.ival = parseInt;
return TokenKind.NUM; return TokenKind.]AT_TOKEN_PREFIX[NUM;
} }
// Individual characters // Individual characters
@@ -630,22 +630,22 @@ class CalcLexer(R) : Lexer
if (c == '#') if (c == '#')
{ {
stderr.writeln (]AT_LOCATION_IF([location, ": ", ])["syntax error: invalid character: '#'"); stderr.writeln (]AT_LOCATION_IF([location, ": ", ])["syntax error: invalid character: '#'");
return TokenKind.YYerror; return TokenKind.]AT_TOKEN_PREFIX[YYerror;
} }
switch (c) switch (c)
{ {
case '+': return TokenKind.PLUS; case '+': return TokenKind.]AT_TOKEN_PREFIX[PLUS;
case '-': return TokenKind.MINUS; case '-': return TokenKind.]AT_TOKEN_PREFIX[MINUS;
case '*': return TokenKind.STAR; case '*': return TokenKind.]AT_TOKEN_PREFIX[STAR;
case '/': return TokenKind.SLASH; case '/': return TokenKind.]AT_TOKEN_PREFIX[SLASH;
case '(': return TokenKind.LPAR; case '(': return TokenKind.]AT_TOKEN_PREFIX[LPAR;
case ')': return TokenKind.RPAR; case ')': return TokenKind.]AT_TOKEN_PREFIX[RPAR;
case '\n': return TokenKind.EOL; case '\n': return TokenKind.]AT_TOKEN_PREFIX[EOL;
case '=': return TokenKind.EQUAL; case '=': return TokenKind.]AT_TOKEN_PREFIX[EQUAL;
case '^': return TokenKind.POW; case '^': return TokenKind.]AT_TOKEN_PREFIX[POW;
case '!': return TokenKind.NOT; case '!': return TokenKind.]AT_TOKEN_PREFIX[NOT;
default: return TokenKind.YYUNDEF; default: return TokenKind.]AT_TOKEN_PREFIX[YYUNDEF;
} }
} }
} }
@@ -1449,7 +1449,9 @@ AT_CHECK_CALC_LALR1_D([%define parse.error verbose %define api.prefix {calc} %ve
AT_CHECK_CALC_LALR1_D([%debug]) AT_CHECK_CALC_LALR1_D([%debug])
AT_CHECK_CALC_LALR1_D([%define parse.error verbose %debug %verbose]) AT_CHECK_CALC_LALR1_D([%define parse.error verbose %debug %verbose])
#AT_CHECK_CALC_LALR1_D([%define parse.error verbose %debug %define api.token.prefix {TOK_} %verbose]) AT_CHECK_CALC_LALR1_D([%define parse.error verbose %debug %define api.token.prefix {TOK_} %verbose])
AT_CHECK_CALC_LALR1_D([%define parse.error verbose %debug %define api.symbol.prefix {SYMB_} %verbose])
AT_CHECK_CALC_LALR1_D([%define parse.error verbose %debug %define api.symbol.prefix {SYMB_} %define api.token.prefix {TOK_} %verbose])
#AT_CHECK_CALC_LALR1_D([%locations %define parse.error verbose %debug %verbose %parse-param {semantic_value *result}{int *count}{int *nerrs}]) #AT_CHECK_CALC_LALR1_D([%locations %define parse.error verbose %debug %verbose %parse-param {semantic_value *result}{int *count}{int *nerrs}])
#AT_CHECK_CALC_LALR1_D([%locations %define parse.error verbose %debug %define api.prefix {calc} %verbose %parse-param {semantic_value *result}{int *count}{int *nerrs}]) #AT_CHECK_CALC_LALR1_D([%locations %define parse.error verbose %debug %define api.prefix {calc} %verbose %parse-param {semantic_value *result}{int *count}{int *nerrs}])