-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathijparser.l
73 lines (62 loc) · 5.23 KB
/
ijparser.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
%{
#include <string.h>
#include "y.tab.h"
#define DEBUG 0
extern int yyval;
int Commentline=0;
int Commentcolumn=0;
int column=1;
%}
%option yylineno
reserved (abstract|assert|break|byte|case|catch|char|const|continue|default|do|double|enum|extends|final|finally|float|for|goto|implements|import|instanceof|interface|long|native|package|private|protected|short|strictfp|super|switch|synchronized|this|throw|throws|transient|try|volatile|null|"++"|"--")
%X COMMENT
%%
<COMMENT><<EOF>> {BEGIN 0;printf("Line %d, col %d: unterminated comment\n",Commentline,Commentcolumn);}
<COMMENT>"*/" {BEGIN 0;column += yyleng;}
<COMMENT>"\n" {column = 1;}
<COMMENT>. {column += yyleng;}
"/*" {BEGIN COMMENT;Commentcolumn=column;column += yyleng;Commentline = yylineno;}
"//".* {column=1;}
" "|"\t" {column += yyleng;}
"\n" {column = 1;}
(([0-9])+|("0x"[0-9a-fA-F]+)) {if(DEBUG)if(DEBUG)printf("INTLIT(%s)\n",yytext); column += yyleng;yylval.token = strdup(yytext);return INTLIT;}
"true"|"false" {if(DEBUG)if(DEBUG)printf("BOOLLIT(%s)\n",yytext); column += yyleng;yylval.token = strdup(yytext);return BOOLLIT;}
"int" {if(DEBUG)printf("INT\n"); column += yyleng;return INT;}
"boolean" {if(DEBUG)printf("BOOL\n"); column += yyleng;return BOOL;}
"new" {if(DEBUG)printf("NEW\n"); column += yyleng;return NEW;}
"if" {if(DEBUG)printf("IF\n"); column += yyleng;return IF;}
"else" {if(DEBUG)printf("ELSE\n"); column += yyleng;return ELSE;}
"while" {if(DEBUG)printf("WHILE\n"); column += yyleng;return WHILE;}
"System.out.println" {if(DEBUG)printf("PRINT\n"); column += yyleng;return PRINT;}
"Integer.parseInt" {if(DEBUG)printf("PARSEINT\n"); column += yyleng;return PARSEINT;}
"class" {if(DEBUG)printf("CLASS\n"); column += yyleng;return CLASS;}
"public" {if(DEBUG)printf("PUBLIC\n"); column += yyleng;return PUBLIC;}
"static" {if(DEBUG)printf("STATIC\n"); column += yyleng;return STATIC;}
"void" {if(DEBUG)printf("VOID\n"); column += yyleng;return VOID;}
"String" {if(DEBUG)printf("STRING\n"); column += yyleng;return STRING;}
".length" {if(DEBUG)printf("DOTLENGTH\n"); column += yyleng;return DOTLENGTH;}
"return" {if(DEBUG)printf("RETURN\n"); column += yyleng;return RETURN;}
"(" {if(DEBUG)printf("OCURV\n"); column += yyleng;return OCURV;}
")" {if(DEBUG)printf("CCURV\n"); column += yyleng;return CCURV;}
"{" {if(DEBUG)printf("OBRACE\n"); column += yyleng;return OBRACE;}
"}" {if(DEBUG)printf("CBRACE\n"); column += yyleng;return CBRACE;}
"[" {if(DEBUG)printf("OSQUARE\n"); column += yyleng;return OSQUARE;}
"]" {if(DEBUG)printf("CSQUARE\n"); column += yyleng;return CSQUARE;}
"&&" {if(DEBUG)printf("OP1&&(%s)\n",yytext); column += yyleng;yylval.token = strdup(yytext);return OP1;}
"||" {if(DEBUG)printf("OP1||(%s)\n",yytext); column += yyleng;yylval.token = strdup(yytext);return OP1OR;}
("<"|">"|"<="|">=") {if(DEBUG)printf("OP2(%s)\n",yytext); column += yyleng;yylval.token = strdup(yytext);return OP2;}
("=="|"!=") {if(DEBUG)printf("OP2(%s)\n",yytext); column += yyleng;yylval.token = strdup(yytext);return OP2EQS;}
("+"|"-") {if(DEBUG)printf("OP3(%s)\n",yytext); column += yyleng;yylval.token = strdup(yytext);return OP3;}
("*"|"/"|"%") {if(DEBUG)printf("OP4(%s)\n",yytext); column += yyleng;yylval.token = strdup(yytext);return OP4;}
"!" {if(DEBUG)printf("NOT\n"); column += yyleng;yylval.token = strdup(yytext);return NOT;}
"=" {if(DEBUG)printf("ASSIGN\n"); column += yyleng;/*yylval.token = strdup(yytext)*/;return ASSIGN;}
";" {if(DEBUG)printf("SEMIC\n"); column += yyleng;return SEMIC;}
"," {if(DEBUG)printf("COMMA\n"); column += yyleng;return COMMA;}
{reserved} {if(DEBUG)printf("RESERVED(%s)\n",yytext); column += yyleng;return RESERVED;}
[a-zA-Z_$]([a-zA-Z_$0-9])* {if(DEBUG)printf("ID(%s)\n",yytext); column += yyleng; yylval.token = strdup(yytext); return ID;}
. {printf("Line %d, col %d: illegal character ('%s')\n",yylineno,column,yytext); column += yyleng;}
%%
int yywrap()
{
return 1;
}