-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlexer.l
75 lines (68 loc) · 1.47 KB
/
lexer.l
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
%option noyywrap
%option yylineno
%{
#include "parser.tab.h"
#include <string>
#include <iostream>
%}
%x COMMENT
%%
"[" BEGIN(COMMENT);
<COMMENT>"]" BEGIN(INITIAL);
<COMMENT>"[" {std::cout<<"Illegal comment within another comment. Calling quit: \n";return(1);}
<COMMENT>. ;
<COMMENT>\n ;
[ \t]+ ;
\n ;
"PLUS" return PLUS;
"MINUS" return MINUS;
"TIMES" return TIMES;
"DIV" return DIV;
"MOD" return MOD;
"EQ" return EQ;
"NEQ" return NEQ;
"LE" return LE;
"GE" return GE;
"LEQ" return LEQ;
"GEQ" return GEQ;
"ASSIGN" return ASSIGN;
"(" return LB;
")" return RB;
":" return COLON;
";" return SEMICOLON;
"," return COMMA;
"DECLARE" return DECLARE;
"BEGIN" return _BEGIN;
"END" return END;
"WRITE" return WRITE;
"READ" return READ;
"IF" return IF;
"THEN" return THEN;
"ELSE" return ELSE;
"ENDIF" return ENDIF;
"WHILE" return WHILE;
"DO" return DO;
"ENDDO" return ENDDO;
"ENDWHILE" return ENDWHILE;
"FOR" return FOR;
"FROM" return FROM;
"TO" return TO;
"DOWNTO" return DOWNTO;
"ENDFOR" return ENDFOR;
[_a-z]+ {
yylval.str = (char *)strdup(yytext);
return pidentifier;
}
-?[0-9]+ {
yylval.str = (char *)strdup(yytext);
return num;
}
. {
std::string lexerError("Unexcepted token: '");
std::string yyLexerError(yytext);
lexerError += yyLexerError;
lexerError += "'";
std::cout<<(lexerError.c_str());
return(1);
}
%%