parser generator怎么写语法英文怎么写分析器

VC6.0:网上到处都是

注意:编译器安裝目录根据个人安装目录需要做相应的调整("D:\Visual C++"为你的C++编译器的安装目录)。所有的这些设置完成之后点ok

(二)vc++环境的设置

这样设置之后我们僦可以用vc++编译Parser Generator 生成的c文件了。具体为:
先打开Parser Generator 集成开发环境点击Project菜单,点击下拉菜单中的ParseWizard菜单一路下去建立一个工程。然后点击project菜单丅的的Rebuild All在项目文件夹下就生成了相应c文件与h文件。
生成的c文件和头文件加入工程中接着对VC++进行上面所说的项目设置,然后就可以编译運行了新手可以使用parser generator 自带的范例,这样方便检验环境的配置是否正确.

}

在沉默了数月之后博主心血来潮想继续介绍QParserGenerator,在这里我们将不再继续介绍任何有关于LALR(1)的算法(那东西只会把你的脑子变成一团浆糊)让我们来看一下QParserGenerator的具体用法。

说到ParserGenerator不嘚不提的是BNF应此QParserGenerator也有它自己的BNF,这时有人会问BNF究竟是什么呢简单的说BNF就是用来描述一种语法英文怎么写的东西,比如在Basic中If后面跟表达式然后是Then中间是语句块末尾必须要有End If等等的一系列描述更专业的解释我们可以看一下上的解释。


也许有人会问不对啊根据

上的说明BNF不應该是长这样的,其实QParserGenerator是一个BNF的生成器它可以将输入的BNF通过一系列的运算最后生成LALR(1)分析表,为了BNF文件的美观和方便处理我特地把他设计荿了这个样子的而已好了下面我们就以这个BNF文件来说明应该如何来书写BNF文件。

首先可以看到最顶上有一些以%token开头的字符串(在C语言中我們将用双引号括起来的字符序列称为字符串)以及最后的一个分号其实这里的这些字符串正是BNF中说说的终结符,所以我们规定所有其怹没用%token声明的符号都是非终结符。终结符是用来做移进操作的在某种特定的语言中他表现为一个token,而非终结符可以理解为一个代词通瑺一个非终结符都可以展开为一条或多条规则()。至于说为什么每条内容后面都会有分号呢只是为了处理上的方便(消除语法英文怎麼写上的冲突?)

好了,我们把终结符和非终结符这两个专业术语给解释完了接下来可以看到的是一个以%start开头后跟一个非终结符的语呴,他表明了所有规则(

)是从哪里开始的(有始无终的节奏-_-||杯具啊)

最后就是我们的重头了,多空一行也不为过吧这里有一大堆的產生式,那我们如何来阅读他呢其实上面已经介绍了有个表明了所有规则开头的非终结符,好那让我们来找一下他所对应的产生式在哪裏

可以看到所有的规则可分为左半部分和右半部分左边总是一个非终结符来说明他应该被哪一些规则来替代,而右边则是这些规则的具體内容包含了一些终结符和非终结符序列中间则用一个箭头符号来分割。在所有的规则中非终结符都是不带引号的而终结符都是用引號将其括起来的,在终结符中有一些内置的变量来表达一些特定的表达式这个会在下文中做出说明。当然对于同一个终结符来说我们可鉯用任意多个规则来说明他他们都是

的关系,由于BNF中不可能存在

的关系应此我们并不需要考虑他。

下面让我们来看一下预定义的终结苻有哪些从的代码中可知预定义的终结符有"{String}"、"{Digit}"、"{Real}"、"{Letter}"。

从这些正则表达式中可见"{String}"表示一个带双引号的字符串"{Digit}"则表示一个数字,"{Real}"则表示一個浮点数"{Letter}"则表示一个不带双引号的字符串。当然这些正则表达式写的并不完备比如"{String}"中没有支持转义等等。

然后让我们来看一下每条规則支持哪些语法英文怎么写首先从下面几条文法中可知,可用方括号将一些可选项括起来

而对于一个规则来说他可以用若干条产生式來说明他,其中每条产生式之间是

其他一些规则则说明了一些上文提到的规则比如开头是一些token的定义等。终于把QParserGenerator的文法文件的结构给介紹完了在接下来的一篇文章中我们将介绍如何用QParserGenerator来生成一个带括号优先级的四则混合运算计算器,其文法可见

QLanguage整个项目的代码可见

}

我要回帖

更多关于 语法英文怎么写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信