Linux Bison语义类型怎么使用

本篇内容主要讲解“Linux Bison语义类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux Bison语义类型怎么使用”吧!

简介
正如UNIX®开发人员所了解的那样,Flex和Linux Bison的功能非常强大,非常适合开发词法和语法解析器,尤其是语言编译器和解释器。

本文介绍了更高级的一些主题:用来在编译器和解释器中更好地实现错误处理能力的特性和技术。为了展示这些技术,我使用了一个示例程序ccalc,它基于Bison手册中的计算机实现了一个增强的计算器。我们可以从本文后面下载一节下载ccalc和相关文件。

增强包括使用了很多变量。在ccalc中,变量是通过在初始化中***使用时定义的,例如a=3。如果变量是在初始化之前使用的,那就会产生语义错误,使用值为0来创建这个变量,并打印一条消息。

示例源文件

示例源代码中包括7个文件:
ccalc.c:主程序,以及一些进行输入、输出和错误处理的函数ccalc.h:包括了对所有模块的定义cmath.c:数学函数parse.y:Bison使用的输入文法lex.l:Flex的输入makefile:简单的makefiledefs.txt:示例输入文件这个程序接收两个参数:
-debug:产生调试输出filename:输入文件名;默认值为defs.txtBison使用的设置为了处理变量名和实际值,Bison的语义类型必须进行增强:

Linux Bison语义类型怎么使用

清单1.更好的Linux Bison语义类型

/*generateinclude-filewithsymbolsandtypes*/  %defines  /*amoreadvancedsemantictype*/  %union{  doublevalue;  char*string;  }

有些文法规则可以产生特定的语义类型,这需要像清单2中一样对Bison进行声明。要获得一个可移植性更好的Bison文法版本,我们需要重新定义+-*/()符号。下面这个例子没有使用左括号(,而是使用了结束符符号LBRACE,这是由词法分析提供的。另外,操作符的优先顺序也必须进行声明。

对于Flex来说,所生成的代码通常都依赖于平台所使用的代码页(codepage)。尽管我们可以使用其他代码页,但是必须要对输入进行转换。因此与Bison代码不同,Flex代码尚不能进行移植。

到此,相信大家对“Linux Bison语义类型怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

赞(0)
未经允许不得转载:主机测评网 » Linux Bison语义类型怎么使用
分享到: 更多 (0)