在词法分析器规则中,字符串被解释成可以在输入流中匹配的一系列字符 (例如., "for" 等于 'f' 'o' 'r').
在语法分析器规则中,字符串代表一个个标记(tokens),并且每个独立的字符串被分派一个标记类型。然而,ANTLR不会创建一个词法分析器规则来匹配这些字符串。相反,ANTLR将这些字符串输入到一个于词法分析器关联的字符常量表中。ANTLR将针对字符常量表来产生代码检测每个标记中的文本,在手动关掉语法分析器对该标记的处理之前获得一个匹配时,会改变标记的类型。你也可以执行手动检测――自动代码生成可以通过词法分析器选项控制。
你可能想在你的动作中使用这些字符串常量的标记的类型值,例如在错误处理器的同步部分。对于只由字母字符组成的字符串常量来说,这个字符串常量的值将是一个形如LITERAL_xxx的常量值,这里xxx是这个标记的名字。例如,文字“return”将有一个LITERAL_return值与之关联。你也可以用标记节(tokens section)分派一个特定的标号给这个文字。
标记引用
以大写字符开头的标识符称为标记引用。接下来的字符可以是任何字符,数字或下划线。在语法分析器规则中一个标记引用将导致匹配特定的标记。在词法分析器中的标记引用将导致调用一个词法规则来匹配该标记的字符。换句话说,在词法分析器中的标记引用将对当作一个规则引用。
标记定义
在词法分析器中的标记定义由和语法规则中相同的定义。但是当做标记而不是语法规则。例如,
class MyParser extends Parser;idList : ( ID ) ; // parser rule definition class MyLexer extends Lexer;ID : ( 'a'..'z' ) ; // token definition
规则引用
以小写字母开头的标识符是为ANTLR的语法规则。接下来的字符可以是任意字母,数字或下划线。词法规则不能引用语法规则。
动作.
在尖括号中的字符序列是语义动作(可能是嵌套的)。在字符串和字符中的尖括号不是动作分隔符。
动作参数
在方括号中的字符序列是动作参数(可能是嵌套的)。在字符串和字符中的方括号不是动作分隔符。在[]中的参数是用被生成的语言的语法定义的,并且用逗号分开。
codeBlock[int scope, String name] // input argumentsreturns [int x] // return values: ... ; // pass 2 args, get returntestcblock{int y;} : y=cblock[1,"John"] ;许多人喜欢我们用普通的括号来括住参数,但是括号在EBNF中已经被很好的用来定义语法组符号(grammatical grouping symbols)。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



