@@ -19,88 +19,90 @@ using namespace yy;
1919
2020%option noyywrap c++ outfile="Lexer.cpp"
2121
22- letter [A -Za -z ]
23- underscore _
24- digit [0 -9 ]
25- id {letter }({underscore }| {letter }| {digit })*
26- integer {digit }+
27- float {digit }+ (\. {digit }+ )? ([eE ][+- ]? {digit }+ )?
28- boolean True| False
29- string \' ([^ \' ])* \'
30- comment #. *
31- newline \r\n | \n\r | \n
22+ letter [A -Za -z ]
23+ underscore _
24+ digit [0 -9 ]
25+ id {letter }({underscore }| {letter }| {digit })*
26+ integer {digit }+
27+ float {digit }+ (\. {digit }+ )? ([eE ][+- ]? {digit }+ )?
28+ boolean True| False
29+ string \' ([^ \' ])* \'
30+ comment #. *
31+ newline \r\n | \n\r | \n
3232
3333%%
3434
35- " " + loc->begin = loc->end; loc->columns (YYLeng()); /* no action and no return */
36- \t loc->begin = loc->end; loc->end.column = ((loc->end.column + 7 ) & ~7 ) + 1 ; /* no action and no return */
37- {comment } /* no action and no return */
38- {newline } loc->begin = loc->end; loc->lines (); return Parser::token::EOL;
39- " <-" | " ←" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ASSIGN;
40- " +" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::PLUS;
41- " -" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::MINUS;
42- " *" | " ×" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::MULTIPLY;
43- " /" | " ÷" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::DIVIDE;
44- " (" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LPAREN;
45- " )" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RPAREN;
46- " <" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LT;
47- " >" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::GT;
48- " =" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::EQ;
49- " /=" | " ≠" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::NE;
50- " <=" | " ≤" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LE;
51- " >=" | " ≥" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::GE;
52- " CONSTANT" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::CONSTANT;
53- " DIV" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::DIV;
54- " MOD" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::MOD;
55- " AND" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::AND;
56- " OR" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::OR;
57- " NOT" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::NOT;
58- " ," loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::COMMA;
59- " :" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::TYPESPEC;
60- " ." loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::DOT;
61- " [" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LBRAK;
62- " ]" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RBRAK;
35+ " " + loc->begin = loc->end; loc->columns (YYLeng()); /* no action and no return */
36+ \t loc->begin = loc->end; loc->end.column = ((loc->end.column + 7 ) & ~7 ) + 1 ; /* no action and no return */
37+ {comment } /* no action and no return */
38+ {newline } loc->begin = loc->end; loc->lines (); return Parser::token::EOL;
39+ " <-" | " ←" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ASSIGN;
40+ " +" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::PLUS;
41+ " -" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::MINUS;
42+ " *" | " ×" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::MULTIPLY;
43+ " /" | " ÷" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::DIVIDE;
44+ " (" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LPAREN;
45+ " )" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RPAREN;
46+ " <" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LT;
47+ " >" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::GT;
48+ " =" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::EQ;
49+ " /=" | " ≠" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::NE;
50+ " <=" | " ≤" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LE;
51+ " >=" | " ≥" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::GE;
52+ " CONSTANT" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::CONSTANT;
53+ " DIV" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::DIV;
54+ " MOD" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::MOD;
55+ " AND" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::AND;
56+ " OR" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::OR;
57+ " NOT" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::NOT;
58+ " ," loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::COMMA;
59+ " :" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::TYPESPEC;
60+ " ." loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::DOT;
61+ " [" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LBRAK;
62+ " ]" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RBRAK;
63+ " {" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LCURL;
64+ " }" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RCURL;
6365
64- " OUTPUT" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::OUTPUT;
65- " USERINPUT" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::USERINPUT;
66- " LEN(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LEN;
67- " POSITION(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::POSITION;
68- " SUBSTRING(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::SUBSTRING;
69- " STRING_TO_INT(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::STRING_TO_INT;
70- " INT_TO_STRING(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::INT_TO_STRING;
71- " STRING_TO_REAL(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::STRING_TO_REAL;
72- " REAL_TO_STRING(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::REAL_TO_STRING;
73- " CHAR_TO_CODE(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::CHAR_TO_CODE;
74- " CODE_TO_CHAR(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::CODE_TO_CHAR;
75- " RANDOM_INT(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RANDOM_INT;
76- " RECORD" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RECORD;
77- " ENDRECORD" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ENDRECORD;
78- " SUBROUTINE" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::SUBROUTINE;
79- " RETURN" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RETURN;
80- " ENDSUBROUTINE" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ENDSUBROUTINE;
66+ " OUTPUT" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::OUTPUT;
67+ " USERINPUT" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::USERINPUT;
68+ " LEN(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::LEN;
69+ " POSITION(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::POSITION;
70+ " SUBSTRING(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::SUBSTRING;
71+ " STRING_TO_INT(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::STRING_TO_INT;
72+ " INT_TO_STRING(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::INT_TO_STRING;
73+ " STRING_TO_REAL(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::STRING_TO_REAL;
74+ " REAL_TO_STRING(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::REAL_TO_STRING;
75+ " CHAR_TO_CODE(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::CHAR_TO_CODE;
76+ " CODE_TO_CHAR(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::CODE_TO_CHAR;
77+ " RANDOM_INT(" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RANDOM_INT;
78+ " RECORD" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RECORD;
79+ " ENDRECORD" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ENDRECORD;
80+ " SUBROUTINE" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::SUBROUTINE;
81+ " RETURN" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::RETURN;
82+ " ENDSUBROUTINE" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ENDSUBROUTINE;
8183
82- " IF" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::IF;
83- " THEN" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::THEN;
84- " ELSE" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ELSE;
85- " ENDIF" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ENDIF;
86- " WHILE" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::WHILE;
87- " ENDWHILE" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ENDWHILE;
88- " REPEAT" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::REPEAT;
89- " UNTIL" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::UNTIL;
90- " FOR" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::FOR;
91- " TO" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::TO;
92- " STEP" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::STEP;
93- " IN" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::IN;
94- " ENDFOR" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ENDFOR;
84+ " IF" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::IF;
85+ " THEN" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::THEN;
86+ " ELSE" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ELSE;
87+ " ENDIF" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ENDIF;
88+ " WHILE" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::WHILE;
89+ " ENDWHILE" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ENDWHILE;
90+ " REPEAT" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::REPEAT;
91+ " UNTIL" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::UNTIL;
92+ " FOR" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::FOR;
93+ " TO" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::TO;
94+ " STEP" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::STEP;
95+ " IN" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::IN;
96+ " ENDFOR" loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ENDFOR;
9597
96- {integer } value->emplace<IntT>(strtol(YYText(), 0 , 10 )); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::INTEGER;
97- {float } value->emplace<RealT>(strtod(YYText(), 0 )); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::FLOAT;
98- {boolean } value->emplace<BoolT>(YYText()[0 ] == ' T' ? true : false ); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::BOOLEAN;
99- {string } value->emplace<StringT>(StringT{ YYText () + 1 , YYText () + YYLeng () - 1 }); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::STRING;
100- {id }" (" value->emplace<std::string>(std::string{ YYText (), YYText () + YYLeng () - 1 }); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::SUBID;
101- {id } value->emplace<std::string>(std::string{ YYText (), YYText () + YYLeng () }); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ID;
102- <<EOF>> loc->begin = loc->end; return Parser::token::ENDOFFILE;
103- . loc->begin = loc->end; loc->columns(); value->emplace<std::string>(std::string{ YYText (), YYText () + YYLeng () }); return Parser::token::UNKNOWN;
98+ {integer } value->emplace<IntT>(strtol(YYText(), 0 , 10 )); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::INTEGER;
99+ {float } value->emplace<RealT>(strtod(YYText(), 0 )); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::FLOAT;
100+ {boolean } value->emplace<BoolT>(YYText()[0 ] == ' T' ? true : false ); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::BOOLEAN;
101+ {string } value->emplace<StringT>(StringT{ YYText () + 1 , YYText () + YYLeng () - 1 }); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::STRING;
102+ {id }" (" value->emplace<std::string>(std::string{ YYText (), YYText () + YYLeng () - 1 }); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::SUBID;
103+ {id } value->emplace<std::string>(std::string{ YYText (), YYText () + YYLeng () }); loc->begin = loc->end; loc->columns (YYLeng()); return Parser::token::ID;
104+ <<EOF>> loc->begin = loc->end; return Parser::token::ENDOFFILE;
105+ . loc->begin = loc->end; loc->columns(); value->emplace<std::string>(std::string{ YYText (), YYText () + YYLeng () }); return Parser::token::UNKNOWN;
104106
105107%%
106108int yyFlexLexer::yylex () { throw std::runtime_error (" bad call to yyFlexLexer::yylex()" ); }
0 commit comments