Restructure bison generation to allow multiple forntends

This commit is contained in:
2024-01-22 21:20:10 +01:00
parent b83f057e49
commit 0e5ef46512
7 changed files with 68 additions and 72 deletions

View File

@@ -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; }

View File

@@ -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;}
;
%%