您的位置:首页 > 其它

antlr v4 使用指南连载3——g4文件概览

2014-12-10 16:35 411 查看

g4文件概览

       在深入介绍之前,有必要先给大家了解一下g4文件的结构,以便对如何编写语法规则文件有个全局的认识,我想这是大有禆益的。因为这样我们就可以很清晰地知道需要的东西写在哪里,或者哪些东西是无法加到antlr中的。

grammar Name;
options {...}
import ...;
tokens {...}
@actionName {...}
<<rule1>>
...
<<rule2>>

这是一个完整的antlr语法规则文件,下面一一做出简要声明:

grammar Name 这是词法跟语法都在同一个文件声明的写法,称之为combined。若要分开,可以使用lexer grammar Name和parser grammar Name。

options 可以是如下四个选项。

superClass:用于生成xxxLexer.java、xxxParser.java的父类

language:目标语句,如java

tokenVocab:toekn词库

TokenLabelType:默认的是antlr的Token类型,这里可以使用自定义的token类,如MyToken。需要配合TokenFactory使用

import 可以导入各个独立的lexer、parser文件,只能用于combined写法。

actionName 可以是如下内容

@header:定义类文件头。比如嵌入java的package、import声明

@member:定义类文件内容。比如类成员、方法

如果要指定在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;

未完待续>>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: