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