mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-21 18:23:03 +00:00
api.token.raw: check it against api.token.constructor
* tests/scanner.at: here.
This commit is contained in:
@@ -43,20 +43,51 @@ AT_YYLEX_PROTOTYPE[
|
|||||||
case '8':
|
case '8':
|
||||||
case '9':
|
case '9':
|
||||||
]AT_VAL[.val = c - '0';
|
]AT_VAL[.val = c - '0';
|
||||||
return ]AT_CXX_IF([yy::parser::token::])[NUM;
|
return NUM;
|
||||||
case '+': return ]AT_CXX_IF([yy::parser::token::])[PLUS;
|
case '+': return PLUS;
|
||||||
case '-': return ]AT_CXX_IF([yy::parser::token::])[MINUS;
|
case '-': return MINUS;
|
||||||
case '*': return ]AT_CXX_IF([yy::parser::token::])[STAR;
|
case '*': return STAR;
|
||||||
case '/': return ]AT_CXX_IF([yy::parser::token::])[SLASH;
|
case '/': return SLASH;
|
||||||
case '(': return ]AT_CXX_IF([yy::parser::token::])[LPAR;
|
case '(': return LPAR;
|
||||||
case ')': return ]AT_CXX_IF([yy::parser::token::])[RPAR;
|
case ')': return RPAR;
|
||||||
case 0: return 0;
|
case 0: return 0;
|
||||||
}
|
}
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
]])
|
]])
|
||||||
|
|
||||||
m4_copy([AT_RAW_YYLEX(c)], [AT_RAW_YYLEX(c++)])
|
m4_define([AT_RAW_YYLEX(c++)],
|
||||||
|
[#include <stdlib.h> /* abort */
|
||||||
|
AT_YYLEX_PROTOTYPE[
|
||||||
|
{
|
||||||
|
static const char* input = "0-(1+2)*3/9";
|
||||||
|
int c = *input++;
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '0':
|
||||||
|
case '1':
|
||||||
|
case '2':
|
||||||
|
case '3':
|
||||||
|
case '4':
|
||||||
|
case '5':
|
||||||
|
case '6':
|
||||||
|
case '7':
|
||||||
|
case '8':
|
||||||
|
case '9':]AT_TOKEN_CTOR_IF([[
|
||||||
|
return yy::parser::make_NUM (c - '0');]], [[
|
||||||
|
]AT_VAL[.val = c - '0';
|
||||||
|
return yy::parser::token::NUM;]])[
|
||||||
|
case '+': return yy::parser::]AT_TOKEN_CTOR_IF([make_PLUS ()], [token::PLUS])[;
|
||||||
|
case '-': return yy::parser::]AT_TOKEN_CTOR_IF([make_MINUS ()], [token::MINUS])[;
|
||||||
|
case '*': return yy::parser::]AT_TOKEN_CTOR_IF([make_STAR ()], [token::STAR])[;
|
||||||
|
case '/': return yy::parser::]AT_TOKEN_CTOR_IF([make_SLASH ()], [token::SLASH])[;
|
||||||
|
case '(': return yy::parser::]AT_TOKEN_CTOR_IF([make_LPAR ()], [token::LPAR])[;
|
||||||
|
case ')': return yy::parser::]AT_TOKEN_CTOR_IF([make_RPAR ()], [token::RPAR])[;
|
||||||
|
case 0: return yy::parser::]AT_TOKEN_CTOR_IF([make_END ()], [token::END])[;
|
||||||
|
}
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
]])
|
||||||
|
|
||||||
m4_define([AT_RAW_YYLEX(d)],
|
m4_define([AT_RAW_YYLEX(d)],
|
||||||
[[import std.range.primitives;
|
[[import std.range.primitives;
|
||||||
@@ -147,10 +178,17 @@ AT_DATA_GRAMMAR([[input.y]],
|
|||||||
]AT_YYLEX_DECLARE[
|
]AT_YYLEX_DECLARE[
|
||||||
}]])[
|
}]])[
|
||||||
|
|
||||||
|
]AT_VARIANT_IF([[
|
||||||
|
%token <int> NUM "number"
|
||||||
|
%nterm <int> exp
|
||||||
|
]], [[
|
||||||
%union {
|
%union {
|
||||||
int val;
|
int val;
|
||||||
}
|
}
|
||||||
%token <val> NUM "number"
|
%token <val> NUM "number"
|
||||||
|
%nterm <val> exp
|
||||||
|
]])[
|
||||||
|
|
||||||
%token
|
%token
|
||||||
PLUS "+"
|
PLUS "+"
|
||||||
MINUS "-"
|
MINUS "-"
|
||||||
@@ -158,7 +196,7 @@ AT_DATA_GRAMMAR([[input.y]],
|
|||||||
SLASH "/"
|
SLASH "/"
|
||||||
LPAR "("
|
LPAR "("
|
||||||
RPAR ")"
|
RPAR ")"
|
||||||
%nterm <val> exp
|
END 0
|
||||||
|
|
||||||
%left "+" "-"
|
%left "+" "-"
|
||||||
%left "*" "/"
|
%left "*" "/"
|
||||||
@@ -206,6 +244,7 @@ m4_foreach([b4_skel], [[yacc.c], [glr.c], [lalr1.cc], [glr.cc], [lalr1.d]],
|
|||||||
[AT_TEST([%skeleton "]b4_skel["])
|
[AT_TEST([%skeleton "]b4_skel["])
|
||||||
AT_TEST([%skeleton "]b4_skel[" %define api.token.raw])])
|
AT_TEST([%skeleton "]b4_skel[" %define api.token.raw])])
|
||||||
|
|
||||||
|
AT_TEST([%skeleton "lalr1.cc" %define api.token.raw %define api.value.type variant %define api.token.constructor])])
|
||||||
|
|
||||||
m4_popdef([AT_MAIN_DEFINE(d)])
|
m4_popdef([AT_MAIN_DEFINE(d)])
|
||||||
m4_popdef([AT_TEST])
|
m4_popdef([AT_TEST])
|
||||||
|
|||||||
Reference in New Issue
Block a user