- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JAVACC简介
double Expression() throws NumberFormatException : { ? double i ; ? double value ; } { ? value = Term() ? ( ??? PLUS ??? i= Term() ??? { value += i ; } ??? | ??? MINUS ??? i= Term() ??? { value -= i ; } ? )* ? { return value ; } } double Term() throws NumberFormatException : { ? double i ; ? double value ; } { ? value = Primary() ? ( ??? TIMES ??? i = Primary() ??? { value *= i ; } ??? | ??? DIVIDE ??? i = Primary() ??? { value /= i ; } ? )* ? { return value ; } } * * JAVACC简介 * JavaCC是一个词法分析器和语法分析器的生成器 词法分析器就是将一系列字符分成一个个的Token,并标记Token的分类 int main() { ??? return 0 ; } 被分成以下的Token “int”, “ ”, “main”, “(”, “)”, “”, “{”, “\n”, “\t”, “return” “”, “0”, “”, “;”, “\n”, “}”, “\n”, “” * 词法分析器工作过程如图所示 * * 例1:正整数相加,能够解析正整数相加的表达式, 如99+42+0+15。 生成一个adder.jj文件,此文件中写入的即 生成词法分析器和语法分析器的规则。 2. 设定选项,并声明类 * JavaCC的输入文档是一个词法和语法的规范文件,其中也包括一些动作的描述,它的后缀是jj. 或者jjt 一个jj文档包括以下部分: Options{}部分,这个部分对产生的语法分析器的特性进行说明,例如向前看的token的个数(用来解除冲突。 这部分可以省略的,因为每一个选项都有默认值,当我们没有对某个选项进行说明时,它就采用默认值 2. 分析器类的声明:这个部分指定了分析器类的名字,以及其他类中成员的声明,这个部分是必需有 * options { ? STATIC = false ; //生成非静态类 LOOKAHEAD=2//向前看2个字母,消除歧义用的 DEBUG_PARSER = true;//以debug形式生成,便于调试} PARSER_BEGIN(Adder) class Adder { ? static void main( String[] args ) throws ParseException, TokenMgrError { ??? Adder parser = new Adder( System.in ) ; ??? parser.Start() ; ? } } PARSER_END(Adder) * 3.声明一个词法分析器 SKIP : { } SKIP : { \n | \r | \r\n } TOKEN : { PLUS : + } TOKEN : { NUMBER : ([0-9])+ } TOKEN : { NUMBER : DIGITS | DIGITS . DIGITS | DIGITS . | . DIGITS } TOKEN : { #DIGITS : ([0-9])+ } 在词法声明部分,以#开头的token只是在词法分析时使用,不能作为语法分析的输入,也就是说,它相对词法分析是局部的 * 第一二行表示空格和回车换行是不会传给语法分析器的。 第三行声明了一个Token,名称为PLUS,符号为“+”。 第四行声明了一个Token,名称为NUMBER,符号位一个或多个0-9的数的组合。 如果词法分析器分析的表达式如下: 123 + 456\n”,则分析为NUMBER, PLUS, NUMBER, EOF “123 - 456\n”,则报TokenMgrError,因为“-”不是一个有效的Token.
文档评论(0)