1 选项
可以在语法和规则级别上配置选项,以改变生成的代码。
1 | options { name1=value1; ... nameN=valueN; } // ANTLR not target language syntax |
value可以是识别符、全限定识别符a.b.c、字符串、花括号包围的多行字符串或整数等。
2 语法选项
所有的语法都可以使用选项。在结合的语法中,除语言相关的外仅与生成的解析器相关。
选项可以通过语法文件设置,可以通过命令行-D参数设置(具有更高优先级)。命令行参数详见ANTLR Tool Command Line Options。
(1) superClass
指定Parser或Lexer的父类。
1 | $ cat Hi.g4 |
(2) language
允许时,更新指定语言的代码。
1 | $ antlr4 -Dlanguage=C MyGrammar.g4 |
(3) tokenVocab
按照出现顺序,为文件中的记号分配编号时,使用该选项指定顺序在哪个文件之后。
1 | $ cat SomeLexer.g4 |
(4) TokenLabelType
通常用于生成引用记号的变量。
如果向解析器或词法器传入了一个用于生成自定义记号的TokenFactory,应该为特殊的类型设置该选项,确保上下文对象知道这个类型。
1 | $ cat T2.g4 |
(5) contextSuperClass
指定解析树内部节点的父类,默认为ParserRuleContext。
应该最小化提取RuleContext。
Java可以使用org.antlr.v4.runtime.RuleContextWithAltNum。其添加了字段altNumber和相关规则节点的alt方法。
3 规则选项
当前没有可用的规则级别的选项,但是支持以下语法用于未来支持:
1 | rulename |
4 规则元素选项
规则元素选项格式:T<name=value>
当前只支持assoc
选项,可以使用left或right作为参数。
以下示例中,左侧递归规则指定了^指数操作符。
1 | grammar ExprLR; |
语义谓词也可以接受选项。
当前仅支持fail
选项,用于在语义失败时输出信息,接收双引号包围的字符串,或者构建字符串的动作。
1 | ints[int max] |
此外,动作中也可以执行返回字符串的函数{...}?<fail={doSomethingAndReturnAString()}>