|
- %{
- #include <iostream>
- #include <cstdlib>
- #include <string>
-
- #include "dbc_scanner.h"
-
- /*
- #undef YY_DECL
- #define YY_DECL int dbcc::DbcScanner::yylex(dbcc::DbcParser::semantic_type * const lval, dbcc::DbcParser::location_type *loc)
-
- using token = dbcc::DbcParser::token;
-
- #define yyterminate() return token::END
- #define YY_NO_UNISTD_H
- #define YY_USER_ACTION loc->step(); loc->columns(yyleng);
- */
- %}
-
- %option nodefault
- %option yyclass="dbcc::DbcScanner"
- %option noyywrap
- %option c++
- %option prefix="dbcc_"
-
- %x MULTI_LINE_COMMENT
- %x SINGLE_LINE_COMMENT
-
- WS [ \t\b\f\r]+
- DECNUMBER [-+]?[0-9]+
- HEXNUMBER 0x[0-9a-fA-F]+
- DOUBLE [-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?
- ID [a-zA-Z_]([_a-zA-Z0-9]*)?
- STRING \"([^"\\]|(\\.))*\"
- NL [\n\r]
-
- %%
- %{
- /* Executed at the beginning of yylex */
- yylval = lval;
- %}
-
- "//"[^\n]* ;
-
- "VERSION" { return dbcc::DbcParser::token::T_VERSION; }
- "BO_" { return dbcc::DbcParser::token::T_BO; }
- "BS_" { return dbcc::DbcParser::token::T_BS; }
- "BU_" { return dbcc::DbcParser::token::T_BU; }
- "SG_" { return dbcc::DbcParser::token::T_SG; }
- "EV_" { return dbcc::DbcParser::token::T_EV; }
- "SIG_VALTYPE_" { return dbcc::DbcParser::token::T_SIG_VALTYPE; }
- "NS_" { return dbcc::DbcParser::token::T_NS; }
- "INT" { return dbcc::DbcParser::token::T_INT; }
- "FLOAT" { return dbcc::DbcParser::token::T_FLOAT; }
- "NAN" { return dbcc::DbcParser::token::T_NAN; }
- "STRING" { return dbcc::DbcParser::token::T_STRING; }
- "ENUM" { return dbcc::DbcParser::token::T_ENUM; }
- "HEX" { return dbcc::DbcParser::token::T_HEX; }
-
- "NS_DESC_" { return dbcc::DbcParser::token::T_NS_DESC; }
- "CM_" { return dbcc::DbcParser::token::T_CM; }
- "BA_DEF_" { return dbcc::DbcParser::token::T_BA_DEF; }
- "BA_" { return dbcc::DbcParser::token::T_BA; }
- "VAL_" { return dbcc::DbcParser::token::T_VAL; }
- "CAT_DEF_" { return dbcc::DbcParser::token::T_CAT_DEF; }
- "CAT_" { return dbcc::DbcParser::token::T_CAT; }
- "FILTER" { return dbcc::DbcParser::token::T_FILTE; }
- "BA_DEF_DEF_" { return dbcc::DbcParser::token::T_BA_DEF_DEF; }
- "EV_DATA_" { return dbcc::DbcParser::token::T_EV_DATA; }
- "ENVVAR_DATA_" { return dbcc::DbcParser::token::T_ENVVAR_DATA; }
- "SGTYPE_" { return dbcc::DbcParser::token::T_SGTYPE; }
- "SGTYPE_VAL_" { return dbcc::DbcParser::token::T_SGTYPE_VAL; }
- "BA_DEF_SGTYPE_" { return dbcc::DbcParser::token::T_BA_DEF_SGTYPE; }
- "BA_SGTYPE_" { return dbcc::DbcParser::token::T_BA_SGTYPE; }
- "SIG_TYPE_REF_" { return dbcc::DbcParser::token::T_SIG_TYPE_REF; }
- "VAL_TABLE_" { return dbcc::DbcParser::token::T_VAL_TABLE; }
- "SIG_GROUP_" { return dbcc::DbcParser::token::T_SIG_GROUP; }
- "SIGTYPE_VALTYPE_" { return dbcc::DbcParser::token::T_SIGTYPE_VALTYPE; }
- "BO_TX_BU_" { return dbcc::DbcParser::token::T_BO_TX_BU; }
- "BA_DEF_REL_" { return dbcc::DbcParser::token::T_BA_DEF_REL; }
- "BA_REL_" { return dbcc::DbcParser::token::T_BA_REL; }
- "BA_DEF_DEF_REL_" { return dbcc::DbcParser::token::T_BA_DEF_DEF_REL; }
- "BU_SG_REL_" { return dbcc::DbcParser::token::T_BU_SG_REL; }
- "BU_EV_REL_" { return dbcc::DbcParser::token::T_BU_EV_REL; }
- "BU_BO_REL_" { return dbcc::DbcParser::token::T_BU_BO_REL; }
- "SG_MUL_VAL_" { return dbcc::DbcParser::token::T_SG_MUL_VAL; }
- "DUMMY_NODE_VECTOR"[0-3] {
- yylval.number = yytext[17]-'0';
- return T_DUMMY_NODE_VECTOR;
- }
-
- {NL} { loc->lines(); }
- {WS} { ; }
-
- {ID} {
- yylval->build<std::string>(yytext);
- return dbcc::DbcParser::token::T_ID;
- }
-
- {STRING} {
- std::string v = std::string(yytext);
- if (v.size() > 2) {
- yytext[v.size() - 1] = 0;
- yylval->build<std::string>(yytext + 1);
- } else {
- /* Empty string */
- yylval->build<std::string>("");
- }
- return dbcc::DbcParser::token::T_STRING_VAL;
- }
-
- {DECNUMBER} {
- yylval->build<int64_t>(std::atoi(yytext));
- return dbcc::DbcParser::token::T_INT_VAL;
- }
-
- {HEXNUMBER} {
- yylval->build<int64_t>(std::strtol(yytext, NULL, 16));
- return dbcc::DbcParser::token::T_INT_VAL;
- }
-
- {DOUBLE} {
- yylval->build<double>(std::strtod(yytext, NULL));
- return dbcc::DbcParser::token::T_DOUBLE;
- }
-
- ":" { return dbcc::DbcParser::token::T_COLON; }
- ";" { return dbcc::DbcParser::token::T_SEMICOLON; }
- "|" { return dbcc::DbcParser::token::T_SEP; }
- "," { return dbcc::DbcParser::token::T_COMMA; }
- "@" { return dbcc::DbcParser::token::T_AT; }
- "+" { return dbcc::DbcParser::token::T_PLUS; }
- "-" { return dbcc::DbcParser::token::T_MINUS; }
- "[" { return dbcc::DbcParser::token::T_BOX_OPEN; }
- "]" { return dbcc::DbcParser::token::T_BOX_CLOSE; }
- "(" { return dbcc::DbcParser::token::T_PAR_OPEN; }
- ")" { return dbcc::DbcParser::token::T_PAR_CLOSE; }
-
- <<EOF>> { yyterminate(); }
- . { return yytext[0]; }
-
- %%
|