一、词法分析器
词法分析器的三种设计方式
词法分析器生成器,手写词法分析器,自动化词法分析器
词法分析器生成器
talk is cheap,show me code
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
| grammar SimpleExpr;
@header { package simpleexpr; }
prog : stat* EOF ;
stat : expr ';' | ID '=' expr ';' | 'if' expr ';' ;
expr : expr ('*' | '/') expr | expr ('+' | '-') expr | '(' expr ')' | ID | INT | FLOAT ;
SEMI : ';' ; ASSIGN : '=' ; IF : 'if' ; MUL : '*' ; DIV : '/' ; ADD : '+' ; SUB : '-' ; LPAREN : '(' ; RPAREN : ')' ;
ID : (LETTER | '_') WORD* ; INT : '0' | ([1-9] DIGIT*) ; FLOAT : INT '.' DIGIT* | '.' DIGIT+ ;
WS : [ \t\r\n]+ -> skip ;
//SL_COMMENT : '//' .*? '\n' -> skip ; SL_COMMENT2 : '//' ~[\n]* '\n' -> skip; DOC_COMMENT : '/**' .*? '*/' -> skip ; ML_COMMENT : '/*' .*? '*/' -> skip ;
fragment LETTER : [a-zA-Z] ; fragment DIGIT : [0-9] ; fragment WORD : LETTER | DIGIT | '_' ;
|