javacc的实例分析-mile米乐体育

javacc的实例分析

这篇文章将为大家详细讲解有关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.java
simple1tokenmanager.java
simple1constants.java
simplecharstream.java
token.java
tokenmgrerror.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的实例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

展开全文
内容来源于互联网和用户投稿,文章中一旦含有米乐app官网登录的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系米乐app官网登录删除

最新文章

网站地图