一、词法分析器

词法分析器的三种设计方式

词法分析器生成器,手写词法分析器,自动化词法分析器

词法分析器生成器

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 | '_' ;