Restructure bison generation to allow multiple forntends
This commit is contained in:
@@ -19,7 +19,9 @@ using token = tpr::TempProfileParser::token;
|
||||
NEWLINE "\n"|"\r\n"
|
||||
COMMENT_LINE "#".*\n
|
||||
SPACE "\t"|" "
|
||||
NUM [-+]?([0-9]*\.[0-9]+|[0-9]+)
|
||||
|
||||
NUM_INT [-+]?([0-9]+)
|
||||
NUM_FLOAT [-+]?([0-9]*\.[0-9]+)
|
||||
|
||||
%%
|
||||
%{
|
||||
@@ -29,7 +31,8 @@ NUM [-+]?([0-9]*\.[0-9]+|[0-9]+)
|
||||
<*>{SPACE} { /*Ignore spaces */}
|
||||
{COMMENT_LINE} {loc->lines(); return token::lineend;}
|
||||
{NEWLINE} {loc->lines(); return token::lineend;}
|
||||
{NUM} {yylval->build<float>(std::stof(std::string(yytext))); return token::number;}
|
||||
{NUM_FLOAT} {yylval->build<float>(std::stof(std::string(yytext))); return token::number_float;}
|
||||
{NUM_INT} {yylval->build<float>(std::stof(std::string(yytext))); return token::number_int;}
|
||||
|
||||
pid_conf { return token::kw_pid_conf; }
|
||||
temp_set { return token::kw_temp_set; }
|
||||
|
@@ -5,6 +5,7 @@
|
||||
%define api.namespace {tpr}
|
||||
%define api.parser.class {TempProfileParser}
|
||||
|
||||
|
||||
%define parse.error verbose
|
||||
|
||||
%code requires{
|
||||
@@ -22,6 +23,7 @@
|
||||
#include <utility>
|
||||
#include <tuple>
|
||||
#include <tpr/tpr-scanner.hpp>
|
||||
#include <tpr/tpr-types.hpp>
|
||||
#undef yylex
|
||||
#define yylex scanner.yylex
|
||||
}
|
||||
@@ -30,7 +32,8 @@
|
||||
%locations
|
||||
%start tpr_file
|
||||
|
||||
%token<float> number
|
||||
%token<float> number_float
|
||||
%token<float> number_int
|
||||
%token lineend
|
||||
%token kw_pid_conf
|
||||
%token kw_temp_set
|
||||
@@ -45,6 +48,8 @@
|
||||
%token kw_digio_wait
|
||||
%token unexpected_input
|
||||
|
||||
%type<float>number number_truncated
|
||||
|
||||
%%
|
||||
|
||||
tpr_file: tpr_command
|
||||
@@ -81,17 +86,25 @@ cmd_wait_time: kw_wait_time number;
|
||||
|
||||
cmd_temp_ramp: kw_temp_ramp number number;
|
||||
|
||||
cmd_beep: kw_beep number;
|
||||
cmd_beep: kw_beep number_truncated;
|
||||
|
||||
cmd_temp_off: kw_temp_off;
|
||||
|
||||
cmd_clear_flags: kw_clear_flags;
|
||||
|
||||
cmd_digio_conf: kw_digio_conf number number;
|
||||
cmd_digio_conf: kw_digio_conf number_truncated number_truncated;
|
||||
|
||||
cmd_digio_set: kw_digio_set number number;
|
||||
cmd_digio_set: kw_digio_set number_truncated number_truncated;
|
||||
|
||||
cmd_digio_wait: kw_digio_wait number number;
|
||||
cmd_digio_wait: kw_digio_wait number_truncated number_truncated;
|
||||
|
||||
number_truncated: number_float {$$ = $1; std::cerr << "[WARN] Floating point number " << $1 << " will be truncated to an integer (" << (int)$1 << ") at location (" << @1 << ")" << std::endl;}
|
||||
| number_int {$$ = $1;}
|
||||
;
|
||||
|
||||
number: number_float {$$ = $1;}
|
||||
| number_int {$$ = $1;}
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
|
Reference in New Issue
Block a user