OpenFPGA/libs/EXTERNAL/libtatum/libtatumparse/tatumparse/tatumparse.l

153 lines
8.1 KiB
Plaintext
Raw Normal View History

2020-01-03 21:42:17 -06:00
%{
/*
* Include Files
*/
#include "tatumparse.hpp"
#include "tatumparse/tatumparse_common.hpp"
#include "tatumparse/tatumparse_error.hpp"
#include "tatumparse/tatumparse_lexer.hpp"
%}
/*
* Options
*/
/* track line numbers*/
%option yylineno
/* No lexing accross files */
%option noyywrap
/* unistd.h doesn't exist on windows */
%option nounistd
/* Avoid unused yyunput function warning */
%option nounput
/* isatty() doesn't exist on windows */
%option never-interactive
/* no default rule to echo unrecongaized tokens to output */
%option nodefault
%option reentrant
/*
* Use a prefix to avoid name clashes with other
* flex lexers
*/
%option prefix="tatumparse_"
/* Common character classes */
ALPHA_SYMBOL [-a-zA-Z_~|:*/\[\]\.\{\}^+$]
DIGIT [0-9]
ALPHA_NUM_SYMBOL ({ALPHA_SYMBOL}|{DIGIT})
BACK_SLASH [\\]
WS [ \t]
ENDL (\n|\n\r|\r\n)
/*
* Symbol Definitions
*/
%%
#.*{ENDL} { /* ignore comments */ }
{BACK_SLASH}{WS}*{ENDL} { /* line continuation don't send EOL to parser */ }
^{WS}*{ENDL} { /* Ignore blank lines. */ }
{ENDL} {
return tatumparse::Parser::make_EOL();
}
{WS}+ { /*skip white space*/ }
timing_graph: { return tatumparse::Parser::make_TIMING_GRAPH(); }
node: { return tatumparse::Parser::make_NODE(); }
type: { return tatumparse::Parser::make_TYPE(); }
SOURCE { return tatumparse::Parser::make_SOURCE(); }
SINK { return tatumparse::Parser::make_SINK(); }
IPIN { return tatumparse::Parser::make_IPIN(); }
OPIN { return tatumparse::Parser::make_OPIN(); }
CPIN { return tatumparse::Parser::make_CPIN(); }
in_edges: { return tatumparse::Parser::make_IN_EDGES(); }
out_edges: { return tatumparse::Parser::make_OUT_EDGES(); }
edge: { return tatumparse::Parser::make_EDGE(); }
src_node: { return tatumparse::Parser::make_SRC_NODE(); }
sink_node: { return tatumparse::Parser::make_SINK_NODE(); }
disabled: { return tatumparse::Parser::make_DISABLED(); }
PRIMITIVE_COMBINATIONAL { return tatumparse::Parser::make_PRIMITIVE_COMBINATIONAL(); }
PRIMITIVE_CLOCK_LAUNCH { return tatumparse::Parser::make_PRIMITIVE_CLOCK_LAUNCH(); }
PRIMITIVE_CLOCK_CAPTURE { return tatumparse::Parser::make_PRIMITIVE_CLOCK_CAPTURE(); }
INTERCONNECT { return tatumparse::Parser::make_INTERCONNECT(); }
timing_constraints: { return tatumparse::Parser::make_TIMING_CONSTRAINTS(); }
CLOCK { return tatumparse::Parser::make_CLOCK(); }
CLOCK_SOURCE { return tatumparse::Parser::make_CLOCK_SOURCE(); }
CONSTANT_GENERATOR { return tatumparse::Parser::make_CONSTANT_GENERATOR(); }
MAX_INPUT_CONSTRAINT { return tatumparse::Parser::make_MAX_INPUT_CONSTRAINT(); }
MIN_INPUT_CONSTRAINT { return tatumparse::Parser::make_MIN_INPUT_CONSTRAINT(); }
MAX_OUTPUT_CONSTRAINT { return tatumparse::Parser::make_MAX_OUTPUT_CONSTRAINT(); }
MIN_OUTPUT_CONSTRAINT { return tatumparse::Parser::make_MIN_OUTPUT_CONSTRAINT(); }
SETUP_CONSTRAINT { return tatumparse::Parser::make_SETUP_CONSTRAINT(); }
HOLD_CONSTRAINT { return tatumparse::Parser::make_HOLD_CONSTRAINT(); }
SETUP_UNCERTAINTY { return tatumparse::Parser::make_SETUP_UNCERTAINTY(); }
HOLD_UNCERTAINTY { return tatumparse::Parser::make_HOLD_UNCERTAINTY(); }
EARLY_SOURCE_LATENCY { return tatumparse::Parser::make_EARLY_SOURCE_LATENCY(); }
LATE_SOURCE_LATENCY { return tatumparse::Parser::make_LATE_SOURCE_LATENCY(); }
domain: { return tatumparse::Parser::make_DOMAIN(); }
name: { return tatumparse::Parser::make_NAME(); }
constraint: { return tatumparse::Parser::make_CONSTRAINT(); }
uncertainty: { return tatumparse::Parser::make_UNCERTAINTY(); }
latency: { return tatumparse::Parser::make_LATENCY(); }
launch_domain: { return tatumparse::Parser::make_LAUNCH_DOMAIN(); }
capture_domain: { return tatumparse::Parser::make_CAPTURE_DOMAIN(); }
capture_node: { return tatumparse::Parser::make_CAPTURE_NODE(); }
delay_model: { return tatumparse::Parser::make_DELAY_MODEL(); }
min_delay: { return tatumparse::Parser::make_MIN_DELAY(); }
max_delay: { return tatumparse::Parser::make_MAX_DELAY(); }
setup_time: { return tatumparse::Parser::make_SETUP_TIME(); }
hold_time: { return tatumparse::Parser::make_HOLD_TIME(); }
analysis_result: { return tatumparse::Parser::make_ANALYSIS_RESULTS(); }
SETUP_DATA { return tatumparse::Parser::make_SETUP_DATA(); }
SETUP_DATA_ARRIVAL { return tatumparse::Parser::make_SETUP_DATA_ARRIVAL(); }
SETUP_DATA_REQUIRED { return tatumparse::Parser::make_SETUP_DATA_REQUIRED(); }
SETUP_LAUNCH_CLOCK { return tatumparse::Parser::make_SETUP_LAUNCH_CLOCK(); }
SETUP_CAPTURE_CLOCK { return tatumparse::Parser::make_SETUP_CAPTURE_CLOCK(); }
SETUP_SLACK { return tatumparse::Parser::make_SETUP_SLACK(); }
HOLD_DATA { return tatumparse::Parser::make_HOLD_DATA(); }
HOLD_DATA_ARRIVAL { return tatumparse::Parser::make_HOLD_DATA_ARRIVAL(); }
HOLD_DATA_REQUIRED { return tatumparse::Parser::make_HOLD_DATA_REQUIRED(); }
HOLD_LAUNCH_CLOCK { return tatumparse::Parser::make_HOLD_LAUNCH_CLOCK(); }
HOLD_CAPTURE_CLOCK { return tatumparse::Parser::make_HOLD_CAPTURE_CLOCK(); }
HOLD_SLACK { return tatumparse::Parser::make_HOLD_SLACK(); }
time: { return tatumparse::Parser::make_TIME(); }
slack: { return tatumparse::Parser::make_SLACK(); }
true { return tatumparse::Parser::make_TRUE(); }
false { return tatumparse::Parser::make_FALSE(); }
[+-]?{DIGIT}+ { return tatumparse::Parser::make_INT(atoi(tatumparse_get_text(yyscanner))); }
(nan)|([-+]?(inf|((({DIGIT}*\.?{DIGIT}+)|({DIGIT}+\.))([eE][-+]?{DIGIT}+)?))) {
return tatumparse::Parser::make_FLOAT(atof(tatumparse_get_text(yyscanner)));
}
\"{ALPHA_NUM_SYMBOL}+\" {
//We trim off the surrounding quotes
const char* quoted_text = tatumparse_get_text(yyscanner);
size_t len = strlen(quoted_text);
return tatumparse::Parser::make_STRING(std::string(quoted_text + 1, len-2));
}
<<EOF>> { /* If the file has no blank line at the end there will
not be the expected EOL following the last command.
So first time through, return EOL, and subsequently
return 0 (which indicated end of file). This ensures
there will always be an EOL provided to the parser.
However it may also generate a stray EOL if the last
line IS blank - so the parser must handle those correctly. */
static bool once; return (once = !once) ? tatumparse::Parser::make_EOL() : tatumparse::Parser::make_EOF();
}
. { tatumparse::tatum_error_wrap(callback, tatumparse_get_lineno(yyscanner), tatumparse_get_text(yyscanner), "unrecognized character"); }
%%