编译原理(课程笔记)
请叫我Oscar
这个作者很懒,什么都没留下…
展开
-
编译原理中单线箭头->和双线箭头=>有什么区别
我在做这道题的时候,考虑着用->来做过程推导,但是老师纠正是说要用=>,所以我对于->和=>有什么区别产生了疑问。查找资料后,总结如下:单线箭头 -> 用在规则(产生式)中,称作“定义为”->:是为了来组成一条文法中的规则的。那么->左右的可以是什么样的符号呢?我们要先了解下文法的四元组的表达方式,G(VN,VT,P,S),其中P代表的是规则,形如:α->β。其中α,β属于(VN∪VT)✱ (✱代表是VN∪VT集合的闭包)(在VN和VT分原创 2021-03-12 14:57:13 · 8173 阅读 · 0 评论 -
编译原理---语法树(推导树)
软件工程学生应该掌握语法树的构造方法知识如下:语法树(推导树)是用来描述上下文无关文法(2型文法)的句型推导的直观工具。文法形如:G=(VN,VT,P,S)其中P是规则(产生式),形如:α->β并且V=VN∪VT这棵树满足4个条件树的每个节点都有一个标记,此标记是V的一个符号。(意为:每个节点都是一个非终结符或者一个终结符)根的标记是S。(树总是从S识别符开始的)若一个结点n的直接子孙,并且有标记A,则A肯定在VN中。(孩子结点是对非终结符进行替换产生的)如果结点的直接子孙从左到原创 2021-03-12 16:04:30 · 18914 阅读 · 0 评论 -
文法的分类
对于软件工程学生,应该能够给出一个文法的写法,就能准确判断他是属于哪一类型。下面是知识内容文法一共分为4种类型0型,1型,2型,3型他们之间是一个包含关系:这意味从0->3型文法,要求越来越苛刻。文法形如:G=(VN,VT,P,S)其中P是规则(产生式),形如:α->β0型文法(短语文法):每个文法的规则的左边必须含有一个非终结符,意思就是α必须含有一个非终结符。1型文法(上下文有关文法):若文法的每一个产生式α->β,都满足|β|≥|α|,仅仅S->ε除原创 2021-03-12 15:39:46 · 2120 阅读 · 1 评论 -
文法的形式化定义
文法G可以定义为四元组(VN,VT,P,S)其中VN为非终结符集合,VT为终结符集合,P为规则集合,S为识别符,或称为开始符(为非终结符)。并且一般约定第一条产生式的左边都是标识符,由尖括号<>括起来的是非终结符,大写的是非终结符;没有用叫括号括起来的,是小写的是终结符。把G写成G[S],其中S是识别符...原创 2021-03-10 18:23:46 · 582 阅读 · 0 评论 -
文法中的语法规则替换--怎么判断一个语句的语法是否合法?
通过上述这张图,展示了EBNF表示的句子的构成规则,问:判断“王明学习英语”这句话语法是否正确?<句子>=><主语><谓语>=><名词><谓语>=>王明<谓语>=>王明<动词><直接宾语>=>王明学习<直接宾语>=>王明学习<名词>=>王明学习英语所以这句话正确...原创 2021-03-08 21:49:57 · 752 阅读 · 0 评论 -
终结符和非终结符怎么区分?
终结符:不是一个语法成分,表示他本身,是不需要被解释的符号。非终结符:表示一个语法成分,是需要被进一步解释的符号。EBNF范式中,所有用尖括号 <>括起来的符号都是“非终结符”,在 ::= 左边的是“非终结符”。任何终结符都不会出现在定义符号的左边的。例子:如,a 是终结符<字母> 是 非终结符<语句> 是非终结符...原创 2021-03-08 16:27:54 · 4029 阅读 · 0 评论 -
代码“编译“和代码“解释“的最根本区别?
生成“目标代码”就是 “编译”不生成目标代码的就是“解释”原创 2021-03-01 12:18:13 · 403 阅读 · 0 评论 -
编译过程的六个阶段
词法分析(lexical analysis or scanning):自动分词,词性标注。从左到右扫描将一个一个字符读入源程序,对构成源程序的字符流进行扫描和分解,从而识别一个单词。语法分析(syntax analysis):在词法分析的基础上,将单词分解成各类语法词语,并表示成"语法树"。语法分析特点:1.每一种“高级语言”都有自己的语法规则2.每一种“高级语言”的编译(解释)程序都将一定将他的语法规则内嵌在其中。语义分析(semantic analysis):按照语法树的层次关系..原创 2021-03-01 12:08:02 · 4688 阅读 · 0 评论