这篇文章将为大家详细讲解有关Javacc的实例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
PARSER_BEGIN(Simple1)public class Simple1 { public static void main(String args[]) throws ParseException { Simple1 parser = new Simple1(System.in); parser.Input(); }}PARSER_END(Simple1)void Input() :{}{ MatchedBraces() (""|"")*}void MatchedBraces() :{}{ "{" [ MatchedBraces() ] "}"} 设置好javacc的bin目录后,在命令提示符下输入javacc Simple1.jj 然后javacc就会为你生成下面几个java源代码文件Simple1.javaSimple1TokenManager.javaSimple1Constants.javaSimpleCharStream.javaToken.javaTokenMgrError.java 其中Simple1就是你的语法分析器的对象,它的构造函数参数就是要分析的输入流,这里的是System.in。 class Simple1就定义在标记PARSER_BEGIN(Simple1)和PARSER_END(Simple1)之间。但是必须清楚的是,PARSER_BEGIN和PARSER_END中的名字必须是词法分析器的名字(这里是Simple1)。 PARSER_END下面的定义就是文法非终结符号的定义了。 Simple1的文法基本就是: Input -> MatchedBraces (""|"")* MatchedBraces -> “{“ MatchedBraces “}” 从它的定义我们可以看到,每个非终结符号对于一个过程。比如Input的过程
void Input() :{}{ MatchedBraces() (""|"")*} 在定义void Input后面记住需要加上一个冒号“:”,然后接下来是两个块{}的定义。 第一个{}中的代码是定义数据,初试化数据的代码。第二个{}中的部分就是真正定义Input的产生式了。 每个产生式之间用”|”符号连接。 注意:这里的产生式并非需要严格BNF范式文法,它的文法既可以是BNF,同时还可以是混合了正则表达式中的定义方法。比如上面的 Input -> MatchedBraces (""|"")*中(“”|””)* 就是个正则表达式,表示的是或者的0个到无限个的重复的记号。而是javacc系统定义的记号(TOKEN),表示文件结束符号。 除了,无论是系统定义的TOKEN,还是自定义的TOKEN, 里面的TOKEN都是以的方式表示。 每个非终结符号(Input和MatchedBraces)都会在javacc生成的Simple1.java中形成Class Simple1的成员函数。当你在外部调用Simple1的Input,那么语法分析器就会开始进行语法分析了。
关于Javacc的实例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
polyfills怎么按需加载
polyfills怎么按需加载本篇内容主要讲解“polyfills...
C#数据类型怎么实现背包、队列和栈
C#怎么实现冒泡排序和插入排序算法
C#怎么实现冒泡排序和插入排序算法这篇文章主要讲解了“C#怎么实现...
C#如何实现希尔排序
C#如何实现归并排序
C#怎么使用符号表实现查找算法
C#类的静态成员怎么用
C#类的静态成员怎么用这篇“C#类的静态成员怎么用”文章的知识点大...
C#的静态函数怎么用
C#的静态函数怎么用这篇文章主要讲解了“C#的静态函数怎么用”,文...
C#中的析构函数怎么用
C#中的析构函数怎么用这篇文章主要讲解了“C#中的析构函数怎么用”...
怎么用CZGL.ProcessMetrics监控.NET应用
用户名
密码
记住登录状态 忘记密码?
邮箱
确认密码
我已阅读并同意 用户协议