使用Flex和Bison更好地进行错误处理

尽管使用 Flex 和 Bison 生成程序非常简单,但是要让这些程序产生用户友 好的语法和语义错误消息却很困难。本文将介绍 Flex 和 Bison 的错误处理特 性,并展示如何使用它们,然后详细介绍它们的一些缺陷。

简介

正如 UNIX 开发人员所了解的那样,Flex 和 Bison 的功能非常强大,非 常适合开发词法和语法解析器,尤其是语言编译器和解释器。如果我们不熟悉它 们所实现的工具 —— 分别是 Lex 和 Yacc —— 可以参 考一下本文 参考资料 一节中有关 Flex 和 Bison 文档的链接,以及其他介绍 这两个程序的文章。

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

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

示例源文件

示例源代码中包括 7 个文件:

ccalc.c:主程序,以及一些进行输入、输出和错误处理的函数

ccalc.h:包括了对所有模块的定义

cmath.c:数学函数

parse.y:Bison 使用的输入文法

lex.l:Flex 的输入

makefile:简单的 makefile

defs.txt:示例输入文件

这 个程序接收两个参数:

-debug:产生调试输出

filename:输入文 件名;默认值为 defs.txt

Bison 使用的设置

为了处理变量名和 实际值,Bison 的语义类型必须进行增强:

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

/* generate include-file with symbols and types */
%defines
/* a more advanced semantic type */
%union {
 double value;
 char *string;
}

时间: 2025-01-10 16:11:03

使用Flex和Bison更好地进行错误处理的相关文章

flex-编译原理中的Flex与Bison,都应用在哪些领域,哪些公司在用?

问题描述 编译原理中的Flex与Bison,都应用在哪些领域,哪些公司在用? 大家好, 想问一下, 编译原理中的Flex与Bison,都应用在哪些领域,哪些公司在用? 我 有这方面的 开发经验,想找相关的工作.但是不知道济南哪些公司在用,请 各位大侠帮忙啦!谢谢!不好意思,没分了 ,请帮一下.

flex中Away3D更复杂的例子(支持拖拽改变摄像头角度)

1,下面通过一个更复杂的样例,演示Away3D的使用 (1)舞台中央添加一个地板,地板上方放置一个方块.方块与地板间有一段距离. (2)地板和方块使用不同的纹理皮肤. (3)默认摄像头的角度是沿x轴倾斜15度. (4)按住鼠标左键拖动视图可以改变摄像头的视角,鼠标滚轮可以改变摄像头远近距离. (5)整个舞台随窗口大小改变,一直保持全屏. (6)添加抗锯齿设置,使物体边缘更加平滑.    2,效果图如下: package{     import flash.display.Sprite;     

flex 开发项目报错之404错误解决方案_Flex

最近两天被HttpStates404这个错误折腾的够呛,在网上查了很多文章,基本上都是说的同样的问题 1URL不对--(但是自己确信应该是对的,因为在XP系统下运行正常,换到Win7下就不行) 2Web.xml配置不对--(自己对这里面的东西不是很了解,所以在网上查了一些资料,一知半解的跟着网上的步骤走,结果还是不行) 最后实在没办法,又回到1的思路上,因为归根结底是没找到该网页,这是自己又重新审视了一下Flex编译生成的文件.终于在这时豁然开朗 我之前Flex编译生成的时候是生成SWF文件和与

Firefox 44 浏览器内建更好的 SSL 错误指示器

Mozilla正在不断努力改善自己的产品,并在Firefox 44中大幅修改了SSL错误页面.Firefox 33浏览器当中第一次出现了SSL错误页面,这些页面被用来告诉用户SSL连接尝试失败,用户的个人资料可能处于风险之中. 虽然在某些情况下是有用的,但是,SSL错误页面也阻止用户访问某些他们自己确信是安全的网址,这些情况最常发生在旧的路由器配置页面或网站实施不安全的加密措施,这些措施都没有更新到最新标准,有时甚至没有接触到外部连接. 火 狐内建的SSL错误页面,阻止用户完全访问他们信任的网站

OpenCASCADE Expression Interpreter by Flex & Bison

OpenCASCADE Expression Interpreter by Flex & Bison eryar@163.com Abstract. OpenCASCADE provide data structure of any expression, relation or function used in mathematics. Flex and Bison are tools for building programs that handle structured input. Th

创建第一个Flex应用程序

在前面的文章中,笔者已经介绍了RIA.Flex技术和Flex Builder 2集成开发环境.从本 文开始将正式开始讲解使用Flex Builder 2创建Flex应用程序的方方面面.本文内容包括典 型应用程序开发步骤和创建第一个Flex应用程序的过程. 1. 应用程序开发步骤 创 建Flex应用程序的过程并不复杂.通常而言,典型应用程序的开发步骤如下所示: (1)使用文本编辑器或者Flex Builder 2创建MXML文件,并在该文件中添加MXML根标签,代码 如下: <?xml versi

Flex/Silverlight的技术比较

别人博客上看见的,一文下去,引起口水大战,其实仁者见仁,智者见智,每种语言都不可能是完善的,扬长避短才是王道. 基于个人的使用经验,我从语言.框架.开发环境和运行环境四个方面对Flex和Silverlight这两门技术做一个比较,自己认为这个比较还是比较全面的.(这样的比较有意义吗?个人意见,只要别把自己当成宗教教徒,将语言看作工具而不是信仰,那么比较就是有意义的.)   语言(Silverlight以C#为准) 特性 比较 胜出 Flex Silverlight 语法 Flex的编程语言Act

有没有不适合使用flex/lex作为词法分析器的语言?

问题描述 有没有不适合使用flex/lex作为词法分析器的语言? O'REILLY <flex和bison(中文版)>第24面问题5.求指点!我个人认为词法分析既然是把输入流分割成为一个个有意义的记号(参见龙书),而只要是程序设计语言肯定就能分割成为有意义的记号(不然人类就无法理解了),那就一定可以用词法分析器生成器如flex生成,可是书上既然提出了这个问题那一定是有道理的!望指点! 解决方案 此问题已被解决,请参见http://www.zhihu.com/question/29922657

Python,Flex 2和Aptana[js开放工具]_常用工具

之所以把它们三个放在一起作为题目,是因为我这几天大部分时间都在捣鼓这几个东西.它们三个给了我很大惊喜,可以说乐趣无穷啊. OK,咱们挨个说,首先是Python. 因为最近动态语言比较火,所以我一直想尝试下动态语言.动态语言中最火的就是Python和Ruby了,由于Ruby是小日本的东西,加之我有严重的反日倾向,因此毫不犹豫地枪毙了Ruby拥抱了Python.下定决心以后,我跑到python.org下载了一个最新版的Python,里面包含一个小型的IDE.试用过后感觉相当Happy.灵活的语法,简