编译原理 属性文法与语法制导翻译(一)

属性文法与语法制导翻译 一这部分为语义分析与中间代码生成部分。属性文法给产生式配上语义规则得到属性文法。 能够得到句子的语法结构,还能得到语法树中每个节点的属性值,实现了语义的分析为每个文法配备了值(属性),如语义规则中的val,代表与文法符号相关的信息,用来存放非终结符对应的表达式(子表达式 项 因子 等) 除了存放具体数值,还可以用来记录类型,代码序列,符号表内容等。对于文法得每个产生式配备

- 阅读全文 -

编译原理 更强的LR分析方法

更强的LR分析方法SLR(1)与LR(1)SLR(1)分析法LR0文法比较简单,描述的语言也比较有限,如下面这个文法不属于LR0,先构造LR0项目集规范族可以看出。注意 I1 I2 I9出现了移进和归约的冲突消解移进归约冲突是有可能的,可以细分。如,当前输入的单词不在要归约生成的A的FOLLOW集中,那不能采取归约动作。如,当前单词是+时,那它不在S‘的FOLLOW集合中,不采用归约,而是采用移进

- 阅读全文 -

编译原理 构造LR分析表

LR分析表的构造LR分析的两个阶段产生分析表语法分析分析结果是一个是否属于该文法的判断结果或者语法树。复习分析栈内的符号串和剩下的输入符号串能构成一个规范句型一旦栈顶出现句柄(可归约串),则进行归约栈内永远不会出现句柄之后的符号字前缀与活前缀字的前缀指的是任意字的首部,abc的前缀有ε,a,ab,abc。活前缀指的是规范句型的一个前缀,这种前缀不包含句柄之后的任何符号。活前缀右边添加一些非终结符或

- 阅读全文 -

编译原理 LR分析器

LR分析器编译原理的老师上课实在是太赶了...感觉自己落下了好多课程,也跟不上,不过今天发现国防科技大学的编译原理慕课说的很清楚,所以先跟着慕课来学习吧。规范规约与句柄规范规约的关键载与寻找句柄LR分析器应该有能力在任何时候判断分析栈的顶部是否出现路句柄,如果出现了句柄,那么把分析栈顶部形成句柄的部分弹出,然后把归约后的符号压入。完成移进归约。根据这三类信息判断是否出现句柄以及下一步如何工作。LR

- 阅读全文 -

linux学习笔记8 账号管理

linux账号管理UID与GIDlinux主机其实并不会直接认识用户的账户名称,实际上识别的是用户的ID,账户名字与ID的对应关系记录在 /etc/passwd 里面,登录后用户至少能够取得两个ID——使用者ID(UID)和群组ID(GID),当需要显示一个用户是谁/属于哪个群组的时候,系统又会根据用户的ID去查找 /etc/passwd 与 /etc/group 中和ID对应的名字。#尝试查看一

- 阅读全文 -

linux学习笔记7 Shell脚本

Shell scriptsShell scripts类似于windows下的批处理文件,可以批量执行shell的命令,除了“将许多命令整合在一起”,shell脚本还能提供循环,条件/逻辑判断等功能,用于实现复杂一些的功能。需要注意的一些点指令执行从上到下,从左向右分析与执行指令与选项间的多个空白会被忽略空白行会被忽略读取到一个Enter符号,就会开始尝试执行如果一行钟内容太多,可以使用 Enter

- 阅读全文 -

linux学习笔记6 正则表达式

正则表达式正则表达式是处理字符串的方法,通过符号的辅助进行对字符串的搜索/删除/替换等操作。按照不同的严谨度区分成了基础正则表达式和延伸正则表达式,延伸的正则除了简单的一组字串处理还可以做群组的字串处理。另外注意,语系会对正则表达式的选择造成影响,因为某些语言编码中,字母大小写是交替出现的,这时如果我们使用A-Z这样的写法就会出现问题,所以我们可以先把语系改为en_us.utf8之类的。另外还可以

- 阅读全文 -

编译原理——文法和语言

文法和语言一个程序设计语言的定义应该包含语法和语义两反面。语法指的是用来形成和产生一个程序的一组规则。目前广泛使用上下文无关文法。语法只定义了什么样的符号序列是合法的,与符号的含义无关,类型匹配,作用域等无法使用上下文无关的方式来检查的,这属于语义分析的范畴。 语义分为两类,静态语义和动态语义,静态语义是一系列的先定规则,确定哪些语法争取的程序是合适的;动态语义表明程序要做些什么。文法的直观概念语

- 阅读全文 -