-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathjava-lexer.ypp
74 lines (51 loc) · 1.85 KB
/
java-lexer.ypp
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
/** Lexical analyser for Java */
/* Disable unneeded features */
%option noyywrap nounput noinput batch
/* Enable debug mode */
/* %option debug */
%{
// Include the common interface
#include "common.hpp"
// Include the parser's function definitions
#include "java-parser.hpp"
%}
BLANK [[:space:]]
DIGIT [0-9]
INTEGER {DIGIT}+
IDENTIFIER [[:alpha:]]([[:alnum:]]|_)*
/* Define an exclusive mode for the multi line comment */
%x COMMENT
%%
"//".+ /* Ignore single line comment */
<INITIAL>"/*" BEGIN(COMMENT);
<COMMENT>"*/" BEGIN(INITIAL);
<COMMENT>.|"\n" /* Ignore comment contents */
class return yy::parser::make_CLASS_KEYWORD();
public return yy::parser::make_PUBLIC_KEYWORD();
protected return yy::parser::make_PROTECTED_KEYWORD();
private return yy::parser::make_PRIVATE_KEYWORD();
final return yy::parser::make_FINAL_KEYWORD();
static return yy::parser::make_STATIC_KEYWORD();
if return yy::parser::make_IF_KEYWORD();
while return yy::parser::make_WHILE_KEYWORD();
return return yy::parser::make_RETURN_KEYWORD();
"(" return yy::parser::make_OPEN_PARENS();
")" return yy::parser::make_CLOSE_PARENS();
"[" return yy::parser::make_OPEN_SQUARE_BRACKET();
"]" return yy::parser::make_CLOSE_SQUARE_BRACKET();
"{" return yy::parser::make_OPEN_BRACKET();
"}" return yy::parser::make_CLOSE_BRACKET();
"=" return yy::parser::make_EQUALS();
"," return yy::parser::make_COMMA();
";" return yy::parser::make_SEMICOLON();
"." return yy::parser::make_DOT();
"+" return yy::parser::make_PLUS();
"-" return yy::parser::make_MINUS();
"<" return yy::parser::make_LESS_THAN();
">" return yy::parser::make_GREATER_THAN();
{INTEGER} return yy::parser::make_NUMBER(std::stoi(yytext));
\".+\" return yy::parser::make_STRING(yytext);
{IDENTIFIER} return yy::parser::make_IDENTIFIER(yytext);
[[:space:]] /* Ignore whitespace */
<<EOF>> return yy::parser::make_YYEOF();
%%