grammar Name;
options {...}
import ...;
tokens {...}
@actionName {...}
<<rule1>>
...
<<rule2>>
以上为g4文件的语法结构,接下来做已经简单的说明:
grammar Name 这是词法跟语法都在同一个文件声明的写法,称之为 combined 。若要分开,可以使用lexer grammar Name和parser grammar Name;
options 可以是如下四个选项:
import 可以导入各个独立的lexer、parser文件,只能用于combined写法;
actionName 可以是如下内容:
如果要指定在lexer或者parser中,可以使用 @lexer::membere、@parser::member。
rule 语法规则
lexer示例
lexer grammar HelloLexer;
HI : 'H' 'i'
ID : [a-z]+;
WS : [\t\n\r\s]+ -> skip;
parser示例
parser grammar HelloParser;
options {
language=Java;
tokenVocab=HelloLexer;
}
@header {
package com.laudandjolynn.antlr;
import java.util.Set;
import java.util.HashSet;
}
@member {
private int count;
public int getCount() {
return count;
}
}
start : HI ID;