按照https://theantlrguy.atlassian.net/wiki/display/ANTLR4/ANTLR+4+Documentation中的开始学习antlr4,成功运行Hello程序。
先记录一下,翻译的不准确理解的不到位的地方还请大家指正。
1.标示符
token names/rules
用大写
rulenames用小写
和java的标示符规则类似,开头可以是_,数字等,其他的可以用字母等,如下规则。
fragment
NameChar
: NameStartChar
|
'0'
..
'9'
|
'_'
|
'\u00B7'
|
'\u0300'
..
'\u036F'
|
'\u203F'
..
'\u2040'
;
fragment
NameStartChar
:
'A'
..
'Z'
|
'a'
..
'z'
|
'\u00C0'
..
'\u00D6'
|
'\u00D8'
..
'\u00F6'
|
'\u00F8'
..
'\u02FF'
|
'\u0370'
..
'\u037D'
|
'\u037F'
..
'\u1FFF'
|
'\u200C'
..
'\u200D'
|
'\u2070'
..
'\u218F'
|
'\u2C00'
..
'\u2FEF'
|
'\u3001'
..
'\uD7FF'
|
'\uF900'
..
'\uFDCF'
|
'\uFDF0'
..
'\uFFFD'
;
字面值
不区分字符和字符串,都是简单的识别单个字符。识别中不包含正则表达式,但可以用标准的转换符号。
动作
动作即代码块,在{}里面。
嵌入的代码可以放置在@header
and @members
命名的动作,词法和语法分析的规则里面,除了语法分析器的参数和属性部分,例如参数,局部变量。
动作时不被解释或者翻译进入生成的词法和语法分析器的。
关键字
import
, fragment
, lexer
, parser
, grammar
, returns
, locals
, throws
, catch
, finally
, mode
, options
, tokens
虽然rule,if之类的不是关键字,但还是尽量避免不要用之类的词作为命名。