当前位置: 首页 > ds >正文

【编译原理】总结

核心

闭包,正则闭包

产生式(规则)

文法 G[S]=(V_{N}V_{T},P,S)      一组规则的集合

V_{N}:非终结符

V_{T}:终结符

P:产生式

S:开始符号

推导

归约

规范(最右)推导

规范(最左)归约

句型

句子

语言

仅含终结符号的句型是一个句子

语言是所有句子的集合

短语

简单(直接)短语

句柄

任意句型的最左简单(直接)短语为句柄

根据语法树,短语--子树,简单短语----只有父子两代的子树

正则文法与状态转换图

右线性文法

左线性文法(归约)

正规式

DFA

M=(S,\sum,f,S0,F)

S0:唯一的初始状态

f:从S\times \sum到S的单值部分映射

F:终止状态集合

NFA

M=(S,\sum,f,S0,F)

S0:非空的初始状态集

f:从S\times \sum^{*}2^{S}的子集的映像

正规式R与NFA

NFA->正规式

确定的自上而下分析

LL(1)文法的条件

  • 文法不含左递归
  • 对文法中每个非终结符的各个产生式的候选首符号集两两不相交
  • 对文法中每一个非终结符,若存在某个候选首符号集包含\varepsilon,则FIRST(A)\cap FOLLOW(A)=\Phi

消除左递归

(1)直接左递归

\textbf{P}\rightarrow \textbf{P}\alpha |\beta \\ P\rightarrow \beta \textbf{P'} \\ \textbf{P'} \rightarrow \alpha \textbf{P'} | \varepsilon

(2)间接左递归

消除文法中全部左递归算法(前提:文法不含回路)

  • 把文法中非终结符,按某种顺序进行排列(顺序任意)
  • 对每个非终结符用排在它前面的其他非终结符的产生式表示出来,并消除产生式中的左递归
  • 化简所得文法,即去掉多余产生式

FISRT集

FOLLOW集

根据所给语言,构造文法

构造一右线性文法,与如下文法等价:先写语言,状态转换图,右线性文法

NFA->DFA   子集构造法

\varepsilon -closure(I)                 move(I,\alpha )

I_{\alpha }=\varepsilon -closure(move(I,\alpha ))

NFA确定化

DFA最小化        划分

正规式R与NFA(构造正规式R的DFA)

消除直接左递归

\textbf{P}\rightarrow \textbf{P}\alpha |\beta \\ P\rightarrow \beta \textbf{P'} \\ \textbf{P'} \rightarrow \alpha \textbf{P'} | \varepsilon

基本知识点

【编译原理】一二章-CSDN博客

【编译原理】第三章 词法分析-CSDN博客

【编译原理】 第四章 自上而下语法分析-CSDN博客

【编译原理】第五章 自下而上语法分析-CSDN博客

课后题

【编译原理】第四章 习题-CSDN博客

【编译原理】第三章 习题_(1) {0,1}上的含有子串010的所有串;-CSDN博客

练习

求FIRST集、FOLLOW集,判断是否为LL(1)文法,构造LL(1)分析表

FIRST集:

E: {'(', 'i'}

E': {+, -, ε}

T: {'(', 'i'}

T': {'*', '/', ε}

F: {'(', 'i'}

A: {+, -}

M: {*, /}

FOLLOW集:

E: {$, )}

E': {$, )}

T: {+, -, $, )}

T': {+, -, $, )}

F: {*, /, +, -, $, )}

A: {'(', 'i'}

M: {'(', 'i'}

该文法是LL(1)文法,因为所有产生式的FIRST集不相交,且对于可以推导出ε的产生式,其FIRST和FOLLOW集无交集

非终结符+-*/()i$
EE→TE'E→TE'
E'E'→ATE'E'→ATE'E'→εE'→ε
TT→FT'T→FT'
T'T'→εT'→εT'→MFT'T'→MFT'T'→εT'→ε
FF→(E)F→i
AA→+A→-
MM→*M→/

LL(1)分析器是一种自顶向下的语法分析器,使用一个分析栈和输入缓冲区来进行分析。其工作原理如下:

1. 初始化时,栈底放置结束符$,然后将开始符号压入栈顶。输入缓冲区存放待分析的字符串,末尾加上$。

2. 不断从栈顶取出符号X:

a. 如果X是终结符,检查是否与当前输入符号匹配。如果匹配,弹出X并消耗输入符号;否则报错。

b. 如果X是非终结符,查找分析表M[X, a](a是当前输入符号),若表中有产生式X→α,将X弹出,将α逆序压入栈中;若表中无条目,报错。

3. 重复步骤2,直到栈中只剩下$,输入缓冲区也只剩下$,此时接受输入字符串;否则报错。

LL(1)分析器通过预测产生式来展开非终结符,每一步都根据当前栈顶符号和输入符号选择正确的产生式,因此要求文法满足LL(1)条件,即分析表每个条目至多有一个产生式,避免冲突。

构造正规式R的DFA

NFA确定化

DFA最小化

消除左递归

习题总结

由文法开始符号经0步或多步推导产生的文法符号序列是(句型)

编译原理通常经历(词法分析)、(语法分析)、语义分析和中间代码生成、(优化)、(目标代码生成)等几个阶段;其中第一个阶段是以(源程序)为输入,(单词符号)为输出;最后一个阶段是以(中间代码)为输入,(机器语言程序或汇编语言程序)为输出。同时(表格管理)和(出错管理)贯穿编译器的各个阶段

解释器与编译器的主要区别是:(编译程序生成目标代码,解释程序不生成目标代码)

高级语言到低级语言的翻译过程称为(编译)。汇编语言到机器语言的翻译过程称为(汇编)

1.正规表达式(\varepsilon |a|b)^{2}表示的集合是()

A.\left \{ \varepsilon ,ab,ba,aa,bb \right \}

B.\left \{ ab,ba,aa,bb \right \}

C.\left \{ a,b,ab,aa,ba,bb \right \}

D.\left \{ \varepsilon ,a,b,aa,bb,ab,ba \right \}

D

\left \{ \varepsilon ,a,b \right \} \left \{ \varepsilon ,a,b \right \}

\left \{ \varepsilon ,a,b,aa,bb,ab,ba \right \}

2.分析树的内部结点仅由()组成

A.开始符号和非终结符号

B.终结符号和非终结符号

C.非终结符号

D.终结符号

C

3.文法

S\rightarrow (L)|a \\ L\rightarrow L,S|S

的终结符号是()

A.S

B.S L

C.a,()

D.a,()|

C

4.NFA M所识别的语言是()

A.0型语言

B.上下文有关语言

C.上下文无关语言

D.正规语言

D

5.同正规式a*b*等价的文法是()

A.S\rightarrow aS|bS|\varepsilon

B.S\rightarrow aSb|\varepsilon

C.S\rightarrow aS|Sb|\varepsilon

D.S\rightarrow abS|\varepsilon

C

L(G)={a^{m}b^{n},a\geq 0,b\geq 0}

D

http://www.xdnf.cn/news/5408.html

相关文章:

  • 由反激电源引起的一点儿分析
  • project从入门到精通(五)
  • Java ClassLoader双亲委派机制
  • 亿级流量系统架构设计与实战(六)
  • Python pip安装conan(在线)
  • Block Styler——字符串控件
  • Cell | 大规模 单细胞图谱 揭示非小细胞肺癌抗PD-1治疗后的免疫微环境异质性
  • 47.电压跌落与瞬时中断干扰的防护改善措施
  • JDBC执行sql过程
  • 技术视角解析:哈达斯无醇气泡葡萄汁的双重风味密码​
  • GLPK(GNU线性规划工具包)介绍
  • Java 中的数据类型误导点!!!
  • windows 环境下 python环境安装与配置
  • Redis-x64-3.0.500
  • React文档-State数据扁平化
  • Vue3响应式原理源码解析(通俗易懂版)
  • Qt中在子线程中刷新UI的方法
  • llama.cpp无法使用gpu的问题
  • 【TypeScript】索引签名类型(Index Signatures)
  • 字符串---StringBuilder的使用
  • Kubernetes生产实战(一):多容器Pod协同实践
  • 超详细Kokoro-82M本地部署教程
  • JavaScript基础-switch分支流程控制
  • 3498. 字符串的反转度
  • MATLAB安装常见问题及解决方案详解(含代码示例)
  • 抖音app 抓包分析
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(18):条件形 文法
  • AI编程: 使用Trae1小时做成的音视频工具,提取音频并识别文本
  • 【python】json解析:invalid literal for int() with base 10: ‘\“\“‘“
  • 模型 启动效应