Add grammar and tokens to parser and scanner
This commit is contained in:
parent
5190e3116b
commit
5b4dc705b4
@ -23,7 +23,7 @@ class TempProfileScanner : public yyFlexLexer{
|
|||||||
|
|
||||||
virtual
|
virtual
|
||||||
int yylex( tpr::TempProfileParser::semantic_type * const lval,
|
int yylex( tpr::TempProfileParser::semantic_type * const lval,
|
||||||
tpr::TempProfileParser::location_type *location );
|
tpr::TempProfileParser::location_type *loc );
|
||||||
// YY_DECL defined in mc_lexer.l
|
// YY_DECL defined in mc_lexer.l
|
||||||
// Method body created by flex in mc_lexer.yy.cc
|
// Method body created by flex in mc_lexer.yy.cc
|
||||||
|
|
||||||
|
@ -1,26 +1,43 @@
|
|||||||
%{
|
%{
|
||||||
#include <tpr/tpr-scanner.hpp>
|
#include <tpr/tpr-scanner.hpp>
|
||||||
|
#include <string>
|
||||||
#undef YY_DECL
|
#undef YY_DECL
|
||||||
#define YY_DECL int tpr::TempProfileScanner::yylex(tpr::TempProfileParser::semantic_type * const lval, tpr::TempProfileParser::location_type *loc )
|
#define YY_DECL int tpr::TempProfileScanner::yylex(tpr::TempProfileParser::semantic_type * const lval, tpr::TempProfileParser::location_type *loc )
|
||||||
|
|
||||||
#define YY_USER_ACTION loc->step(); loc->columns(yyleng);
|
#define YY_USER_ACTION loc->step(); loc->columns(yyleng);
|
||||||
|
|
||||||
|
using token = tpr::TempProfileParser::token;
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%option yyclass="tpr::TempProgileScanner"
|
%option yyclass="tpr::TempProfileScanner"
|
||||||
%option noyywrap
|
%option noyywrap
|
||||||
%option never-interactive
|
%option never-interactive
|
||||||
%option c++
|
%option c++
|
||||||
|
|
||||||
/* Predefined rules */
|
/* Predefined rules */
|
||||||
NEWLINE "\n"|"\r\n"
|
NEWLINE "\n"|"\r\n"
|
||||||
SPACE " "|"\t"|"\f"
|
COMMENT_LINE "#".*\n
|
||||||
COMMENT_BEGIN "/*"
|
SPACE "\t"|" "
|
||||||
COMMENT_END "*/"
|
NUM [-+]?([0-9]*\.[0-9]+|[0-9]+)
|
||||||
COMMENT_LINE "//".*\n
|
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
SPACE {return 0;}
|
<*>{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;}
|
||||||
|
|
||||||
|
pid_conf { return token::kw_pid_conf; }
|
||||||
|
temp_set { return token::kw_temp_set; }
|
||||||
|
wait_temp { return token::kw_wait_temp; }
|
||||||
|
wait_time { return token::kw_wait_time; }
|
||||||
|
temp_ramp { return token::kw_temp_ramp; }
|
||||||
|
beep { return token::kw_beep; }
|
||||||
|
temp_off { return token::kw_temp_off; }
|
||||||
|
clear_flags { return token::kw_clear_flags; }
|
||||||
|
digio_conf { return token::kw_digio_conf; }
|
||||||
|
digio_set { return token::kw_digio_set; }
|
||||||
|
digio_wait { return token::kw_digio_wait; }
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
@ -30,15 +30,67 @@
|
|||||||
%locations
|
%locations
|
||||||
%start tpr_file
|
%start tpr_file
|
||||||
|
|
||||||
%token foo
|
%token<float> number
|
||||||
|
%token lineend
|
||||||
|
%token kw_pid_conf
|
||||||
|
%token kw_temp_set
|
||||||
|
%token kw_wait_temp
|
||||||
|
%token kw_wait_time
|
||||||
|
%token kw_temp_ramp
|
||||||
|
%token kw_beep
|
||||||
|
%token kw_temp_off
|
||||||
|
%token kw_clear_flags
|
||||||
|
%token kw_digio_conf
|
||||||
|
%token kw_digio_set
|
||||||
|
%token kw_digio_wait
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
tpr_file: foo
|
tpr_file: tpr_command
|
||||||
| tpr_file foo
|
| tpr_file tpr_command
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
tpr_command: tpr_command_inner lineend
|
||||||
|
| lineend
|
||||||
|
;
|
||||||
|
|
||||||
|
tpr_command_inner: cmd_pid_conf;
|
||||||
|
| cmd_temp_set
|
||||||
|
| cmd_wait_temp
|
||||||
|
| cmd_wait_time
|
||||||
|
| cmd_temp_ramp
|
||||||
|
| cmd_beep
|
||||||
|
| cmd_temp_off
|
||||||
|
| cmd_clear_flags
|
||||||
|
| cmd_digio_conf
|
||||||
|
| cmd_digio_set
|
||||||
|
| cmd_digio_wait
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
cmd_pid_conf: kw_pid_conf number number number number number number;
|
||||||
|
|
||||||
|
cmd_temp_set: kw_temp_set number;
|
||||||
|
|
||||||
|
cmd_wait_temp: kw_wait_temp number;
|
||||||
|
|
||||||
|
cmd_wait_time: kw_wait_time number;
|
||||||
|
|
||||||
|
cmd_temp_ramp: kw_temp_ramp number number;
|
||||||
|
|
||||||
|
cmd_beep: kw_beep number;
|
||||||
|
|
||||||
|
cmd_temp_off: kw_temp_off;
|
||||||
|
|
||||||
|
cmd_clear_flags: kw_clear_flags;
|
||||||
|
|
||||||
|
cmd_digio_conf: kw_digio_conf number number;
|
||||||
|
|
||||||
|
cmd_digio_set: kw_digio_set number number;
|
||||||
|
|
||||||
|
cmd_digio_wait: kw_digio_wait number number;
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
void tpr::TempProfileParser::error(const location_type &l, const std::string &err_message)
|
void tpr::TempProfileParser::error(const location_type &l, const std::string &err_message)
|
||||||
|
Loading…
Reference in New Issue
Block a user