编译器编译原理
Chinamming
这个作者很懒,什么都没留下…
展开
-
正则表达式DFA构造方法
陈梓瀚 vczh@163.com http://www.cppblog.com/vczh/1、问题概述随着计算机语言的结构越来越复杂,为了开发优秀的编译器,人们已经渐渐感到将词法分析独立出来做研究的重要性。不过词法分析器的作用却不限于此。回想一下我们的老师刚刚开始向我们讲述程序设计的时候,总是会出一道题目:给出一个填入了四则运算式子的字符串,写程序计算该式子的结果。除此之外,我们有转载 2013-12-06 14:15:35 · 26893 阅读 · 2 评论 -
如何将flex 生成的可重入C词法扫描器与bison生成的C++语法解析器配接起来
如题,本文主要是flex与bison 的配合问题。 bison设置在bison用户手册中已经详尽说明了,这里不再赘述。 主要说明一下flex 的设置,并给出一个示例工程。1. flex设置 %{/* 由于flex在输入结束时默认的yyterminate()返回值为0,与bison中token::END可以能不一致 */#define yyterminate() return tok转载 2013-11-26 23:02:30 · 3015 阅读 · 0 评论 -
词法分析生成器 之 Lexertl 【3】配合bison工作
众所周知,bison是C/C++领域最著名的开源语法生成器之一。并且一直保持着活跃的开发状态。当前发表的最新稳定版本为2.4.2(2010-03-20)。在本节我们将lexertl和bison结合在一起,生成一个简单的分析器。 其中 lexertl 负责生成词法分析器,而 bison 负责生成语法分析器。 本示例的语法描述文件取自Bison自带的生成C++代码例子,说明文档在 ht转载 2013-11-26 23:00:55 · 1287 阅读 · 0 评论 -
windows 下 bison 命令行调用
目标:将bison集成到Visual studio中做法:以cygwin下bison为例。1.新建一个批处理文件 bison.bat,内如如下:@set bison_dir="E:/SDK/cygwin/bin" @set Path=Path;%bison_dir% @REM bison command line @REM Usage @REM bison.bat %g转载 2013-11-26 22:59:04 · 2993 阅读 · 0 评论 -
编译器工具 Flex Bison for Windows 简单入门例子
最近从事一个系统仿真软件的开发,里面定义了自己的描述性语言MSL, MSL语言经FlexBison转换成C语言,然后用C编译器来编译并计算仿真。现在领域驱动开发比较热门,有机会定义自己的语言对程序员来说是比较有成就感的,免不了要去学习编译原理和flex, bison, antlr等工具的使用,在控制仿真语言,数控编程,还有股票程序化交易系统,游戏脚本中都可以看到领域驱动开发的影子。借此转载 2013-11-26 22:57:20 · 7257 阅读 · 0 评论 -
使用Flex Bison 和LLVM编写自己的编译器[zz]
1、介绍我总是对编译器和语言非常感兴趣,但是兴趣并不会让你走的更远。大量的编译器的设计概念可以搞的任何一个程序员迷失在这些概念之中。不用说,我也曾 今尝试过,但是并没有取得太大的成功,我以前的尝试都停留在语义分析阶段。本文的灵感主要来源于我最近一次的尝试,并且在这一次中我取得一点成就。幸运的是,最近的几年,我参加了一些项目,这些项目给了我在建立编译器上很多有用的经验和观点。另外一件事是,我转载 2013-11-26 22:52:55 · 1601 阅读 · 0 评论 -
程序中,调用Bison和Flex结合的小例子
网上的很多程序,对初次接触Bison和Flex的人而言,都有点复杂,看最简单的例子更好些:http://stackoverflow.com/questions/1920604/how-to-make-yy-input-point-to-a-string-rather-than-stdin-in-lex-yacc-solaris我稍微修改一下,说说自己的理解,也作为一个备忘:Flex程序转载 2013-11-26 22:53:53 · 1417 阅读 · 0 评论 -
程序中,调用Bison和Flex结合的小例子(语法分析中处理数据)
接着前面的 那一篇,再来整点新东西: http://www.cnblogs.com/gaojian/archive/2013/05/17/3083662.html我想,实际的工作中,绝对不会像逆波兰式计算器那样简单,直接就在语法分析器里完成计算。常常需要构造一颗语法树,然后把它传出来!例如各种数据库系统处理SQL文就是这样子。上程序: 1 [root@lex tota转载 2013-11-26 22:54:56 · 1217 阅读 · 0 评论 -
程序中,调用Bison和Flex结合的小例子(类似完成语法树)
接前面的例子:程序中,调用Bison和Flex结合的小例子要做出存储语法树结构的全局变量: 1 [root@lex ~]# cd /soft/total 2 [root@lex total]# ls 3 lexer.l lex.yy.c myparser myparser.c myparser.h parser.y y.tab.c y.tab.h 4 [r转载 2013-11-26 22:55:50 · 2125 阅读 · 0 评论 -
使用bison和flex工具[zz]
这里有一个使用bison建立一个简单的计算器的例子:http://www.cs.berkeley.edu/~maratb/cs164/bison.html使用bison和flex工具学习编译原理,远比单独看书然后自己编写一些程序生动的多。这样你就不会在那些复杂的字符处理,正则表达式的处理上浪费精力,最后费尽心力,却没有结果,失去了学习的兴趣。我这里有一个简单的计算器的程序,可以转载 2013-11-26 22:56:47 · 2012 阅读 · 0 评论 -
Flex&Bison Tips - 如何改善 flex & bison 在VC下的编辑环境
我在VC下安装VC助手(VisualAssistX), 让它可以高亮显示C/C++语法,同时支持快捷跳转、自动联想、简单重构等功能。1. 将flex的输入文件命名为后缀 .cpp, 但是将这个.cpp文件从工程编译中排除,这样既可以方便在flex输入文件中写C/C++代码。同时编译也不会报错。 2. 如果要让flex生成的头文件和源文件具有自己的名字,也很简单,在flex的输入文件中使转载 2013-11-26 23:01:40 · 1925 阅读 · 0 评论 -
基于Lex 和 Yacc 的 C 语言编译器
最近由于项目需要,看了点关于编译原理和编译器等方面的资料,特别是词法分析和语法分析部分,现做一下小结。 一、编译器及其工作流程 编 译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序。编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源程序一般转载 2013-11-26 23:07:44 · 11536 阅读 · 2 评论 -
GNU Flex与Bison结合使用
Bison适合上下文无关文法(Context-free grammar),并采用LALR(1)算法的文法。当bison读入一个终结符(token),它会将该终结符及其语意值一起压入堆栈。这个堆栈叫做分析器堆栈(parser stack)。把一个token压入堆栈通常叫做移进(shifting);当已经移进的后n个终结符和组(groupings)与一个文法规则相匹配时,会被根据那个规则结合起来叫做归转载 2013-11-26 23:12:01 · 9140 阅读 · 0 评论 -
正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——1 概述
说明:本系列文章介绍的算法均来自编译原理(龙书)一书,如果读者对代码没有兴趣,只想了解算法思路,完全可以阅读龙书相关章节内容,比我讲得清晰透彻。序: 啃编译原理半年以来,任然徘徊在前4章,其间反反复复,时而不求甚解,时而略有所悟。后来接触到正则表达式,对其实现原理颇有兴趣,于是百度之、谷歌之,以求解惑。先是搜索到不少国内发表的学术论文和各位大侠博客上的文章,后又通转载 2013-12-06 22:46:18 · 2159 阅读 · 0 评论 -
正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——2 构造抽象语法树
简要介绍 构造抽象语法树是构造基于DFA的正则表达式引擎的第一步。目前在我实现的这个正则表达式的雏形中,正则表达式的运算符有3种,表示选择的|运算符,表示星号运算的*运算符,表示连接的运算符cat(在实际正则表达式中被省去)。例如对于正则表达式a*b|c,在a*和b之间省略了连接运算符cat。其中|、cat运算符是双目运算符,*运算符是单目运算符。下图来自编译原理一书:转载 2013-12-06 22:47:26 · 9801 阅读 · 0 评论 -
浅谈SQLite——浅析Lemon
1、概述 Lemon是一个LALR(1)文法分析器生成工具。虽然它是SQLite作者针对SQLite写的一个分析器生成工具,但是它与bison和yacc类似,是一个可以独立于SQLite使用的开源的分析器生成工具。而且它使用与yacc(bison)不同的语法规则,可以减少编程时出现错误的机会。Lemon比yacc和bison更精致、更快,而且是可重入的,也是线程安全的——这对于支持多线程的程转载 2013-11-26 23:06:06 · 2001 阅读 · 0 评论 -
在Visual Studio2008中搭建lex和yacc调试环境
本文为原创,部分bat代码来自熊春雷前辈的博文:http://blog.csdn.net/pandaxcl/archive/2006/07/04/873898.aspx 为什么要使用lex和yacc 最近的项目需要写一个Language Service,于是不可避免的涉足到了lex和yacc。lex和yacc原本是UNIX系统下的两个工具,用于编写涉及文本分析的程序。在Lin转载 2013-11-26 23:04:31 · 3996 阅读 · 2 评论 -
最简单的flex & bison例子
y.tab.h?/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003转载 2013-11-26 22:51:36 · 3129 阅读 · 0 评论 -
20050620 GNU Bison 中文手册翻译完成
20050620 GNU Bison 中文手册翻译完成GNU Bison实际上是使用最广泛的Yacc-like分析器生成器,使用它可以生成解释器,编译器,协议实现等多种程序. 它不但与Yacc兼容还具有许多Yacc不具备的特性.这个手册编写十分完整,带你领略Bison在使用中的各个细节(注:并不是实现细节).如果发现错误,语句不通顺,意思不明,确请立即发邮件把您的建议或者您认为正确的翻转载 2013-11-26 23:11:30 · 6684 阅读 · 1 评论 -
Bison生成文件分析
Bison功能很强大,可以加参数-v可以生成可阅读的.output文件,还可以生成dot转换图本文以lex yacc 创建一个桌面计算器 为例子研究bison生成代码所有介绍都以bison生成为准,通过-v生成*.output文件,通过设置#define YYDEBUG 1以及yydebug=1进行调制文法0 ACCEPT : OVER1 OVER : E '\n'2转载 2013-11-26 23:16:08 · 5588 阅读 · 0 评论 -
语法分析——Bison介绍以及Flex、Bison联合编译
语法分析使用Bison,在前面的博文中提到一些如何在Windows下安装Bison,但是从语法分析开始,我还是在Linux下写实验的,安装了ubuntu,因此需要在Linux下安装Bison,这个安装是比较简单的,只需要在命令行中敲入如下命令:sudo apt-get install bison,同样,安装Flax:sudo apt-get install flex 如,写好转载 2013-11-26 23:14:22 · 11039 阅读 · 3 评论 -
Yacc介绍与使用
•什么是YACC? yacc(Yet Another Compiler Compiler),是Unix/Linux上一个用来生成编译器的编译器(编译器代码生成器). 使用巴克斯范式(BNF)定义语法,能处理上下文无关文法(context-free)。出现在每个产生式左边(left-hand side:lhs)的符号是非终端符号,出现在产生式右边(right-hand side:rhs)的符转载 2013-11-26 23:13:16 · 1715 阅读 · 0 评论 -
在VC6.0/VC2008中高效地使用flex & bison
由于 目前的主要工作是IDE,而IDE中主要负责Compiler & Assembler部分,这两部分中都会用到flex & bison(Lex & Yacc),所以通常的做法是在相应工程目录(如:工程为SDCC Compiler)下建立一个parser的目录,然后里面存放.l(lex文件)和.y(yacc文件)文件,还有一个.bat文件,这个.bat文件的作用是把.l和.y文件调用flex &转载 2013-11-26 23:12:38 · 1687 阅读 · 0 评论 -
状态机之C++解析
一、状态机描述状态机理论最初的发展在数字电路设计领域。在数字电路方面,根据输出是否与输入信号有关,状态机可以划分为Mealy型和Moore型状态机;根据输出是否与输入信号同步,状态机可以划分为异步和同步状态机。而在软件设计领域,状态机设计的理论俨然已经自成一体。Moore型状态机的输出只和当前状态有关,和输入无关,如果在软件设计领域设计出这种类型的状态机,则该状态机接受的事件都是无内蕴信息的事转载 2013-12-06 14:27:15 · 6090 阅读 · 0 评论