编译原理
文章平均质量分 53
skywuuuu
这个作者很懒,什么都没留下…
展开
-
运用Yacc和Lex来DIY计算器(代码部分)
前言这篇文章有点makefile的感觉直接看代码应该问题不大,这里直接附上代码,本来想弄在GitHub上,后来觉得太麻烦了,还是直接复制黏贴吧。毕竟这是个小工程,如果大家有更好的想法或者在跑代码的时候有什么疑惑欢迎留言啊!!介绍我们的代码支持识别if-else, while, {}, (), sin, 二进制转十进制(B2D), 计算阶乘(Factorial), 基础四则运算等简单功能。可以通过compiler.c做出伪代码汇编语言版本,graph.c可以画出我们代码的syntax tree,int原创 2021-01-15 16:25:17 · 675 阅读 · 0 评论 -
运用Yacc和Lex来DIY计算器
前言来源于设计计算器的小组作业,运用了Yacc和Lex来设计一个简单的计算器。文章内容为英文,但通俗易懂(用翻译软件翻译一下应该没问题,暂时不校对中文版了(偷懒))。感谢小伙伴们的帮助,以下排名不分先后:️️dzj,lxz,lyhan,skywuuu. 文章有点长,Introduction可跳过,Preparation部分讲的是如何在windows和Ubuntu下安装Flex和Bison,之后是展示我们设计的功能(Demonstration fo functions)和代码解释(Code Explanat原创 2021-01-15 15:58:40 · 2036 阅读 · 0 评论 -
Linux下switch-case的case中不能定义变量——C语言意想不到的错误
Linux下switch-case的case中不能定义变量——C语言意想不到的错误代码在linux下与.l文件和.y文件一起编译的时候发现以下代码报错(在windows的IDE中未发现异常)case: int res = factorial(x); if(res < 0){ printf("error"); return -1; }解决办法将int res的变量声明移出switch即可解决...原创 2021-01-03 23:26:43 · 312 阅读 · 0 评论 -
什么是%prec
什么是%prec理解%prec%prec即是precedence的缩写,也就是用来决定优先级的。比如在符号中本来没有UMINUS这个说法(UMINUS表示一元负号,也就是给一个数加上负号,例如:−5×6-5\times6−5×6,其实UMINUS就是个名字,想取什么就取什么)但却有所需求,在规则后面加上此话则可以确定其优先级。定义语法%prec terminal-symbol这个定义就是把该终结符(terminal)所具有的优先级赋予该规则,而这个优先级将会覆盖在普通方式下推断出来的该规则的优先级原创 2021-01-01 22:16:05 · 3985 阅读 · 3 评论