implement lexer grammar

This commit is contained in:
ChUrl
2020-12-03 19:57:20 +01:00
parent 0dceca3670
commit 70daa64d38
2 changed files with 77 additions and 2 deletions

View File

@ -0,0 +1,7 @@
O
src/main/java/util/ast/AST.java,1/d/1db155d1c826f7ce81093ab2ee88b0afa9c698d8
P
src/main/java/util/ast/Node.java,a/e/ae3ca6b6b8a06fc2cba3a596d8a0d8d2acd8a16f
S
#src/main/java/parser/LL1Parser.java,8/1/8144fa070804a52542f36f405b65ca25f794ce3c

View File

@ -7,8 +7,76 @@ lexer grammar StupsLexer;
package lexer;
}
// Fragments
fragment FIRST_DIGIT : [1-9] ;
fragment DIGIT : [0-9] ;
NUMBER : FIRST_DIGIT DIGIT* ;
WHITESPACE : ' ' -> skip ;
fragment LOWERCASE : [a-z] ;
fragment UPPERCASE : [A-Z] ;
fragment LETTER : LOWERCASE | UPPERCASE ;
fragment LETTER_DIGIT : LETTER | DIGIT ;
fragment WHITE : [\t\r\n\u0020] ; // HORIZONTAL TAB, CARRIAGE RETURN, LINE FEED, SPACE
fragment ANY : [\u0000-\u007F] ;
fragment ANY_NOBREAK : ~[\r\n] ;
fragment ANY_NOWHITE : ~[\t\r\n\u0020] ;
// Discard
WHITESPACE : WHITE+ -> skip ;
MULTILINE_COMMENT : '/*' ANY* '*/' -> skip ;
LINE_COMMENT : '//' ANY_NOBREAK* -> skip ;
// Keywords
CLASS : 'class' ;
PUBLIC : 'public' ;
STATIC : 'static' ;
VOID_TYPE : 'void' ;
BOOLEAN_TYPE : 'boolean' ;
STRING_TYPE : 'String' ;
IF : 'if' ;
ELSE : 'else' ;
WHILE : 'while' ;
PRINTLN : 'System.out.println' ;
// Operators
ASSIGN : '=' ;
ADD : '+' ;
SUB : '-' ;
MUL : '*' ;
DIV : '/' ;
MOD : '%' ;
NOT : '!' ;
AND : '&&' ;
OR : '||' ;
EQUAL : '==' ;
NOT_EQUAL : '!=' ;
LESS : '<' ;
LESS_EQUAL : '<=' ;
GREATER : '>' ;
GREATER_EQUAL : '>=' ;
// Structural
L_PAREN : '(' ;
R_PAREN : ')' ;
L_BRACE : '{' ;
R_BRACE : '}' ;
L_BRACKET : '[' ;
R_BRACKET : ']' ;
SEMICOLON : ';' ;
COMMA : ',' ;
DOT : '.' ;
// Literals
INTEGER_LIT : '-'? DIGIT+ ;
STRING_LIT : '"' ANY_NOBREAK* '"' ;
BOOLEAN_LIT : 'true' | 'false' ;
// Identifier
IDENTIFIER : LETTER LETTER_DIGIT* ;