![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译原理
用心倾听
程序狂 爱逗你玩
展开
-
lex 常用函数
yyleng只要扫描程序匹配标记时,标记的文本就存储在以空字符终止的字符串yytext中,而且它的长度存储在yyleng中,yyleng中的长度与由strlen(yytext)返回的值是相同的。yyless()从与规则相关的代码中调用yyless(n),这条规则推回除标记开头的几个字符以外的所有字符。当决定标记之间边界的规则不方便表示为正则表达式时,它是很有用的例:转载 2012-11-01 16:08:15 · 3618 阅读 · 0 评论 -
LEX AND YACC 使用 (—)
Lex自动地表示把输入串词法结构的正规式及相应的动作转换成一个宿主语言的程序,即词法分析程序,它有一个固定的名字yyler,在这里yyler是一个C语言的程序。Yylex将识别出输入串中的词形,并且在识别出某词形时完成指定的动作。看一个简单的例子:写一个lex源程序,将输入串中的小写字母转换成相应的大定字母。程序如下:%%[a-z]printf(“%c”.yytext[0]转载 2012-12-05 19:10:11 · 1591 阅读 · 0 评论 -
LEX AND YACC 使用(三)
在2.3.8中已涉及到二义性和冲突的问题,这里再集中介绍一下,这在写Yacc源程序时会经常碰到。二义性会带来冲突。在2.3.8中我们介绍了yacc可以用为算符确定优先级和结合规则解决由二义性造成的冲突,但是有一些由二义性造成的冲突不易通过优先级方法解决,如有名的例子:stat:IF bexp THEN stat|IF bexp THEN stat ELSEstat;对于这样转载 2012-12-05 20:23:15 · 3613 阅读 · 0 评论 -
LEX AND YACC 使用(二)
二、语法分析程序自动产生器yacc的使用方法2.l yacc概述形式语言都有严格定义的语法结构,我们对它们进行处理时首先要分析其语法结构。yace是一个语法分析程序的自动产生器,严格地说Lex也是一个形式语言的语法分析程序的自动产生器。不过Lex所能处理的语言仅限于正规语言,而高级语言的词法结构恰好可用正规式表示,因此Lex只是一个词法分析程序的产生器。yace可以处理能用LALR(1)文转载 2012-12-05 19:56:36 · 2180 阅读 · 0 评论 -
parse generator生成c++文件
parse generator是Windows下替代bison的一款好软件,使用academic copy license时,可以无功能限制使用。网上有很多关于生成c的例子。这里来个c++的。我是在VC6环境下的,关于配置的问题,我就不讲了,参看PG自带的帮助文件的“设置Visual C++ version 4.0及更高版本”一节。保证include files啊,source files转载 2012-12-05 22:05:01 · 1128 阅读 · 0 评论 -
编译阶段完成的任务
源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 连接器 (Linker) → 可执行程序 (executables)1. 词法分析词法分析器根据词法规则识别出源程序中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中转载 2012-12-29 22:11:21 · 1246 阅读 · 0 评论 -
Error: Can't resolve multiple constant drivers for net "state[31]" at traffic.vhd(36)
两个或者多个进程里都有同一个条件判断的话,会产生并行信号冲突的问题。同一个信号不允许在多个进程中赋值,否则则为多驱动。进程的并行性决定了多进程不同能对同一个对象进行赋值。原创 2013-06-04 14:19:11 · 1368 阅读 · 0 评论