-
Notifications
You must be signed in to change notification settings - Fork 0
/
pascal.l
84 lines (79 loc) · 1.83 KB
/
pascal.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
76
77
78
79
80
81
82
83
84
%{
#include <stdio.h>
#include <stdlib.h>
#define YY_DECL int yylex()
#include "pascal.tab.h"
%}
%option noyywrap
%option yylineno
delim [ \t\r]
ws {delim}+
letter [A-Za-z]
digit [0-9]
identifier ({letter}|_)({letter}|{digit}|_)*
realnum {digit}+(\.{digit}+)?
integer {digit}+
%%
"of" { return OF; }
"or" { return OR; }
"program" { return PROGRAM; }
"integer" { return INTEGER; }
"real" { return REAL; }
"do" { return DO; }
"else" { return ELSE; }
"end" { return END; }
"for" { return FOR; }
"if" { return IF; }
"array" { return ARRAY; }
"mod" { return MODULUS; }
"not" { return NOT; }
"procedure" { return PROCEDURE; }
"then" { return THEN; }
"var" { return VAR; }
"while" { return WHILE; }
"and" { return AND; }
"begin" { return BEG; }
"div" { return DIV; }
"function" { return FUNCTION; }
"to" { return TO; }
"writeln" { return WRITELN; }
"write" { return WRITE; }
"readln" { return READLN; }
"read" { return READ; }
"+" { return PLUS; }
"-" { return MINUS; }
"*" { return ASTERISK; }
"/" { return SOLIDUS; }
"<" { return LESS; }
"<=" { return LESSEQUALS; }
"=" { return EQUALS; }
"<>" { return NOTEQUALS; }
">" { return GREAT; }
">=" { return GREATEQUALS; }
"." { return DOT; }
"," { return COMMA; }
":" { return COLON; }
";" { return SEMICOLON; }
":=" { return ASSIGN; }
".." { return DOUBLEDOT; }
"(" { return LPAREN; }
")" { return RPAREN; }
"[" { return LSQUARE; }
"]" { return RSQUARE; }
"\n" { }
{ws} // Ignore whitespace
{identifier} {
yylval.identifier = (char*)malloc(sizeof(yytext));
strcpy(yylval.identifier, yytext);
return IDENTIFIER;
}
{integer} {
yylval.ival = atoi(yytext);
return INTNUM;
}
{realnum} {
yylval.fval = atof(yytext);
return REALNUM;
}
^\{.*\}$ // Ignore comments
%%