代码拉取完成,页面将自动刷新
2020年,大三下学习编译原理所写实验
和lalr分析器
部分三地址代码
生成器,输出三地址代码block
作为expression
, 导致if
文法的冗余. 但木已成舟, 不好调头.else_stmt->debug()
, 如果else_stmt
未定义, 那么直接抛出core dumped, 没有其他一点报错. 很不友好1.词法分析能否采用空格来区分单词?
不可,比如a=10;
但对于int a;
又需要空格来划分.
即单纯用空格划分不靠谱, 需要与单词类别结合综合判断.
2.程序设计中哪些环节影响词法分析的效率?如何提高效率?
用flex
好像真没遇到效率问题.
3.生成的三地址代码可否直接输出(不采用数据结构来实现属性code)?
没有定义code字段, 而是输出到一个全局vector
中
4.如何保证四则运算的优先关系和左结合性?
在bison
中定义即可, 自动工具会用了很厉害
5.如何采用代码段相对地址代替三地址代码序列中的标号?
全局vector
6.完成一个实验,通常要进行实验设计、实验实现、实验结果分析,你在本次实验中,是否都涉及的这三个类工作,在大学学习的这几年的实验中,是不是都或多或少设计了这三类工作?
实验设计:
vector
存储三地址码实现
龙书中的回填技术
vector
从设计上来说不好, 但好用实验结果分析
label
其实是全局vector
中的下标, 所以说没有严格从0开始.label
, 是因为回填的冗余%
开头, 而不是t
, 因为t_
可能是一个正式的变量名x:int
, 有些小小的奇怪😂if if else
的二义性解决, 通过改写文法实现的. 改写为if C {...} else ...
, 限定了if的作用域, 挺多语言都这样子.while
语句也改写了, 接近于c语言风格之前的设计只是小打小闹, 在学过软工后才明白设计的重要性以及设计的手段
(Ubuntu 7.4.0-1ubuntu1~18.04.1)
bywww@wbypc:~/projects/helloworld/flex_bison/compiler/tac$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.4.0-1ubuntu1~18.04.1'
Thread model: posix
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
bywww@wbypc:~/projects/helloworld/flex_bison/compiler/tac$ make -v
GNU Make 4.1
Built for x86_64-pc-linux-gnu
flex
和bison
bywww@wbypc:~$ flex --version
flex 2.6.0
bywww@wbypc:~$ bison --version
bison++ Version 1.21.9-1, adapted from GNU bison by coetmeur@icdc.fr
Maintained by Magnus Ekdahl <magnus@debian.org>
直到...不变
的代码需要改,当下用loop+长度判断
实现, 希望有更好的判断方法
双栈+accessed
不行, 因为accessed
长度在变化此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。