编译系统
文章平均质量分 77
red1y
每当我为你抬起头,连眼泪都觉得自由
展开
-
编译系统实验二 语义分析
实验任务利用实验一生成的语法分析树,完成语义分析参考源码实验步骤一、符号表建立收集词法分析中识别出的所有标识进行排序、去重,赋予每个标识符唯一索引号后续使用二分查找进行符号表的检索/* symbol table crater */SNode* getAllSymbol(Node* node); // 遍历语法树void insertSymbol(char* symbol); // 插入符号到集合中void getUnqSymbol(); // 符号去重void sort原创 2022-04-13 16:51:05 · 964 阅读 · 0 评论 -
编译系统实验一 Part 2 语法分析和错误恢复
实验任务使用bison实现c--语法分析器完成语法分析,生成语法分析树识别语法错误,输出错误信息,完成错误恢复识别单行和多行注释,不支持嵌套注释(识别为语法错误)实现效果源码// 例1.2int main(){ float a[10][2]; int i; a[5,3] = 1.5; if(a[1][2] == 0) i = 1 else i = 0; a(x);}// 例1.3int inc(){ int i;原创 2022-03-25 21:27:59 · 3524 阅读 · 4 评论 -
编译系统实验一 Part 1 词法分析
实验任务使用flex实现c--词法分析器识别整数、浮点数、标识符识别关键字、特殊符号、括号等识别八进制、十六进制整数,指数形式的浮点数对无法识别的单元进行报错实验效果(源码未出现的样例及报错属于语法分析范畴)// 例1.1int main(){ int i = 1; int j = ~1;}\image-20220320211205869.png)]// 例1.3int inc(){ int i; i = i + 1;}原创 2022-03-20 21:41:21 · 854 阅读 · 1 评论 -
【编译系统】【第四讲、语法分析 LL(1)文法 FOLLOW集、SELECT集、FIRST集】
4.1 自顶向下分析概述(Top-Down Parsing)自顶向下分析:从文法开始符号SSS推导出词串www的过程,需要确定替换当前句型中的哪个非终结符用该非终结符的哪个候选式进行替换最左推导(Left-most Derivation):总是选择每个句型的最左非终结符进行替换逆过程:最右归约如果S⇒lm∗αS \Rightarrow^*_{lm} \alphaS⇒lm∗α,则称α\alphaα是当前文法的最左句型(left-sentential form)最右推导(Ri原创 2022-02-27 21:20:25 · 255 阅读 · 0 评论 -
【编译系统】【第三讲、词法分析器的生成】
词法分析器生成工具lex语言:描述单词的正则定义式,及识别后的动作lex编译器:实现正则定义式RD(包含在lex源程序中),向确定有穷自动机DFA(c语言程序)的转换生成词法分析器:lex语言源程序→lex编译器c语言词法分析程序→c语言编译器词法分析器\text{lex语言源程序} \xrightarrow{lex编译器} c语言词法分析程序 \xrightarrow{c语言编译器} 词法分析器lex语言源程序lex编译器c语言词法分析程序c语言编译器词法分析器lex语言意义加快词法分析原创 2022-02-24 17:36:30 · 670 阅读 · 0 评论 -
【编译系统】【第三讲、词法分析】
3.1 正则表达式语言 L={a}{a,b}∗({ϵ}∪({.,}{a,b}{a,b}∗))L = \{a\}\{a,b\}^*(\{\epsilon\}\cup(\{.,_\}\{a,b\}\{a,b\}^*))L={a}{a,b}∗({ϵ}∪({.,}{a,b}{a,b}∗))正则形式 r=a(a∣b)∗(ϵ∣(.∣)(a∣b)(a∣b)∗)r = a(a|b)^*(\epsilon|(.|_)(a|b)(a|b)^*)r=a(a∣b)∗(ϵ∣(.∣)(a∣b)(a∣b)∗)定义原创 2022-02-24 07:24:30 · 229 阅读 · 0 评论 -
【编译系统】【第二讲、语言及文法】
2.1 基本概念字母表(Alphabet):∑\sum∑,有穷符号集字母表上的运算乘积(product):∑1∑2={ab∣a∈∑1,b∈∑2}\sum_1\sum_2 = \{ab | a \in \sum_1, b \in \sum_2\}∑1∑2={ab∣a∈∑1,b∈∑2}幂(power):∑0={ϵ},∑n=∑n−1∑,n≥1\sum^0 = \{\epsilon\}, \sum^n = \sum^{n-1} \sum, n\ge 1∑0={ϵ},∑n=∑n−1∑,n≥1正闭原创 2022-02-24 07:23:49 · 648 阅读 · 0 评论 -
【编译系统】【第一讲、绪论补充】【编译器自展和交叉编译】
I、编译程序的生成设有高级语言L1L_1L1,机器语言为AAA的机器,简称机器AAA,在没有其他条件的情况下只能用AAA语言编写L1L_1L1语言的编译器当已经有了L1L_1L1语言在AAA机器上的编译器P1P_1P1时,现在要为高级语言L2L_2L2编写编译器,显然不必再使用机器语言AAA来实现。使用L1L_1L1语言编写将L2L_2L2语言转换为AAA语言的编译程序P2′P_2'P2′,在经过编译器P1P_1P1,就得到了可以在AAA机器上运行的L2L_2L2语言的编译器上述原创 2022-02-22 20:37:57 · 679 阅读 · 0 评论 -
【编译系统】【第一讲、绪论】
1.1 什么是编译编译:将高级语言(源语言)翻译成汇编语言或机器语言(目的语言)的过程源程序 →预处理器(Preprocessor)\xrightarrow{预处理器(Preprocessor)}预处理器(Preprocessor) 经过处理的源程序 →编译器\xrightarrow{编译器}编译器 汇编语言程序 →汇编器(Assembler)\xrightarrow{汇编器(Assembler)}汇编器(Assembler) 可重定位的机器代码 →链接器(Linker)/加载器(Loader)原创 2022-02-21 22:14:24 · 842 阅读 · 0 评论