-
Notifications
You must be signed in to change notification settings - Fork 0
/
mylang.lex
54 lines (42 loc) · 1.07 KB
/
mylang.lex
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
%{
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "../utils/util.h"
#include "tokens.h"
extern int pos;
int _pos=1;
int yywrap(void)
{
_pos=1;
return 1;
}
void adjust(void)
{
pos=_pos;
_pos+=yyleng;
}
%}
id [a-zA-Z][a-zA-Z0-9]*
num [0-9]+
%Start COMMENT
%%
<INITIAL>print {adjust(); return PRINT;}
<INITIAL>{id} {adjust(); yylval.sval = String(yytext); return ID;}
<INITIAL>{num} {adjust(); yylval.ival = atoi(yytext); return NUM;}
<INITIAL>"," {adjust(); return COMMA;}
<INITIAL>";" {adjust(); return SEMICOLON;}
<INITIAL>"(" {adjust(); return LPAREN;}
<INITIAL>")" {adjust(); return RPAREN;}
<INITIAL>"+" {adjust(); return PLUS;}
<INITIAL>"-" {adjust(); return MINUS;}
<INITIAL>"*" {adjust(); return TIMES;}
<INITIAL>"/" {adjust(); return DIV;}
<INITIAL>"=" {adjust(); return ASSIGN;}
<INITIAL>" " {adjust(); continue;}
<INITIAL>\n {adjust(); continue;}
<INITIAL>\t {adjust(); continue;}
<INITIAL>. {adjust(); fprintf(stderr, "illegal token");}
<INITIAL>"/*" {adjust(); BEGIN COMMENT;}
<COMMENT>"*/" {adjust(); BEGIN INITIAL;}
<COMMENT>. {adjust();}