@@ -19,88 +19,90 @@ using namespace yy;
19
19
20
20
%option noyywrap c++ outfile="Lexer.cpp"
21
21
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
32
32
33
33
%%
34
34
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;
63
65
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;
81
83
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;
95
97
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;
104
106
105
107
%%
106
108
int yyFlexLexer::yylex () { throw std::runtime_error (" bad call to yyFlexLexer::yylex()" ); }
0 commit comments