上下文无关文法——形式定义和推导办法

西安交大编译原理作业题解析:从文法推导到LR分析的完整路线图 编译原理是计算机科学的核心课程,它研究如何将高级语言翻译为机器可执行代码。理解文法推导、Chomsky文法分类、下推自动机与有限自动机的区别,是掌握编译器前端的基础。而自底向上的LR分析、算符优先关系以及中间代码生成,则构成了编译器中端的关键技术。这些概念不仅是理论考题的常客,更直接支撑着词法分析、语法分析、代码优化与目标代码生成等工程实践。从可重定位目标代码到符号表的地址分配,再到基本块划分与静态作用域解析,编译器的每个阶段都对应着可验证的具体问题。本文结合西安交大编译原理作业题,逐项推演文法推导过程,辨 阅读详情

形式定义

上下文无关文法GGG是一个四元组,即G=(VT,VN,P,S)G=(V_T,V_N,P,S)G=(VT​,VN​,P,S):

  • 终结符(Token)集合VTV_TVT​
  • 非终结符集合VNV_NVN​(与VTV_TVT​不相交)
  • 产生式或文法规则A→αA\rightarrow \alphaA→α形成的集合PPP,其中A∈VNA\in V_NA∈VN​,α∈(VT∪VN)∗\alpha \in (V_T\cup V_N)^*α∈(VT​∪VN​)∗
  • 开始符号SSS,其中S∈VNS\in V_NS∈VN​

注:终结符和非终结符可以用单个字符表示,也可以用字符串表示。

最左和最右推导

  • 对于文法G[S]G[S]G[S],S⇒∗γS\Rightarrow {}^*\gammaS⇒∗γ是一个最左推导是指:在由SSS推导γ\gammaγ的过程中,任何一步直接推导α⇒β\alpha \Rightarrow \betaα⇒β,都是用字符串α\alphaα中的最左非终结符对应的产生式规则进行推导,其中α\alphaα、β\betaβ是句型。

    • 简单整型算术表达式文法:
      exp→exp  op  exp∣(exp)∣numberexp\rightarrow exp\; op\; exp|(exp)|numberexp→expopexp∣(exp)∣number
      op→+∣−∣∗op\rightarrow +|-|*op→+∣−∣∗
      算术表达式(34−3)∗42(34-3)*42(34−3)∗42的最左推导:
      最左推导
  • S⇒∗γS\Rightarrow {}^*\gammaS⇒∗γ是一个最右推导是指:在由SSS推导γ\gammaγ的过程中,任何一步直接推导α⇒β\alpha \Rightarrow \betaα⇒β,都是用字符串α\alphaα中的最右非终结符对应的产生式规则进行推导,其中α\alphaα、β\betaβ是句型。 > 最右推导也被称为规范推导,由规范推导所得的句型称为规范句型。 - 简单整型算术表达式文法:
    exp→exp  op  exp∣(exp)∣numberexp\rightarrow exp\; op\; exp|(exp)|numberexp→expopexp∣(exp)∣number
    op→+∣−∣∗op\rightarrow +|-|*op→+∣−∣∗
    算术表达式(34−3)∗42(34-3)*42(34−3)∗42的最右推导:
    最右推导

纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理 分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。 阅读详情

相关推荐

腾讯文档API逆向分析:不用Selenium也能批量导出的黑科技

本文揭秘了如何通过Python逆向分析腾讯文档的隐藏API,实现无需Selenium即可批量导出在线表格的高效方法。详细解析了API调用流程、Cookie维护及异常处理技巧,相比传统方案性能提升显著,适用于大量文档导出的自动化场景。

h9j8k7l6m5n的博客 1201

上下文无关文法(CFG)

关键词:上下文无关文法、CFG、BNF、语法分析树、语法分析。

Dong_HFUT的博客 2万+

从零构建高精度电子秤:HX711与STM32的时序通信陷阱与实战避坑指南

本文详细解析了使用STM32F103C8T6与HX711模块构建高精度电子秤的通信时序陷阱与实战解决方案。重点探讨了微秒级延迟实现、数据读取算法、校准方法和滤波优化,帮助开发者避开常见通信问题,提升电子秤的测量精度和稳定性。

data3的博客 782

编译原理之文法推导

已知文法G: <表达式> ::= <项> | <表达式>+<项> <项> ::= <因子> | <项>*<因子> <因子> ::= (<表达式>) | i 试给出下列表达式的推导。 (1) i (2) (i) (3) i*i (4) i*i+i (5) i+(i+i) (6) i+i*i (7) (i+i)*i (8) i+i (9) i*i+i*i (10)i*i*i 3. 算法思想 描

chen_zan_yu_的博客 9638

WhatsApp协议算法

我想其实有很多人还不太了WhatsApp群控,简单来说,它和我们常使用的微信聊天软件是类似的,只不过它是基于通讯录的,操作起来比较简单便捷,所以现在有很多国家都喜欢用WhatsApp。一般情况下,筛号不会造成账号被封的情况,但是呢,如果筛号的频率太快,就会被系统限制筛号能力,不再返回筛号结果,所以,筛号数量和速度一定要控制好。前天逛街突然灵光一现,为什么不试试多路访问呢,简单来说就是信道复用技术,马上跑回家,调取接口,接入通道,导入已经转换成协议的账号,成功登录!

2403_87755661的博客 1942

睿尔曼超轻量仿人机械臂-ROS第一篇 启动机械臂的Moveit

本文主要讲述了睿尔曼六轴机械臂在ROS中的功能包配置,及如何根据文件启动Moveit做仿真。

realman_Rop的博客 7489

什么是上下文无关文法、最左推导和最右推导—编译原理

S→aSbS→abS → aSb\\S → abS→aSbS→ab这个文法有两个产生式,每个产生式左边只有一个非终结符SSS,这就是上下文无关文法,因为你只要找到符合产生式右边的串,就可以把它归约为对应的非终结符。最左推导:每一步替换最左边的非终结符最右推导:每一步替换最右边的非终结符最右推导称为规范推导。最右推导对应于最左规约(规范规约)

我们都是被分成两半的人,一边热爱生活,一边憎恨生活。面对生活,我们总是在矛盾的两端摇摆,在反复的矛盾和犹豫中,一边踉跄前行,一边重振旗鼓。我渴望改变,渴望变得更好,渴望找到出口……就像一个溺水人的挣扎,就像一个救生圈。我是一个矛盾集合体,想要变得快乐,但是 9775

RWEQ土壤风蚀模型的估算与变化归因分析

本次以介绍RWEQ模型的基本原理及数据需求,再结合案例讲解RWEQ模型中区域地理空间数据库构建的方法和各个参量提取的原理与方法,最后结合典型案例进行综合讲解风蚀模数估算、制图及归因分析。空间分析与制图:提取分析、局部分析、邻域分析、区域分析、插值分析、平滑处理、像元提取、采样与重采样。以某实际应用为案例,掌握RWEQ模型进行当地土壤风蚀量空间分布分析整体流程。地图服务器、在线地图、范围指示器、格网、表格、基础地图服务使用规则介绍。掌握土壤风蚀模型的原理、优势点及因子组成。

2301_77413856的博客 1193

编译原理-4-上下文无关文法

4-上下文无关文法

SpriCoder的博客 1万+

【QT开发教程】使用Qt进行蓝牙低功耗(BLE)编程

蓝牙低功耗(BLE,Bluetooth Low Energy)技术广泛应用于现代设备中,例如智能手表、健身追踪器和物联网设备。Qt提供了一套完整的Bluetooth模块,使开发者可以轻松地在应用程序中实现BLE通信功能。本文将介绍如何在Qt中进行BLE编程,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 2869

[Python] -项目实战10- 用 Python 自动化批量重命名文件

本文介绍了使用Python实现文件批量重命名的技术方法。主要内容包括:1)使用os和pathlib模块进行基础文件操作;2)提供多种实用脚本示例,如添加序号、替换字符、添加时间戳等;3)进阶功能包括用户输入和错误处理;4)GUI工具实现方案;5)常见问题与优化建议。文章详细讲解了从简单到复杂的批量重命名实现方法,帮助读者快速掌握这一提高工作效率的技能。建议开发者注意路径处理、错误管理等细节,确保脚本稳健运行。

每日出拳老爷子的博客 815

编译原理学习笔记之上下文无关文法

一、上下文无关文法 1.定义 上下文无关文法是这样一个四元组(VT , VN , S, P) VT:终结符集合,非空有限集合,记号名是其同义词 VN:非终结符集合,非空有限集合且VT∩VN=Φ S:开始符号 P:产生式集合,形如A -&gt; a,A∈VN,a∈(VN∪VT)* 其中,终结符可以理解为词法单元,即是符号的最终形式,非终结符就是匹配终结符过程中引入的中间量, 例({i...

ZP_icenow的博客 1万+

微信公众平台 - 微信内置浏览器 WeixinJSBridge.invoke(‘xxx‘) API 报错:system:access_denied(常见于微信支付、分享朋友圈/转发好友等功能)解决方案

微信支付提示System:access_denied,调用微信支付返回:system:access_denied为什么,安卓版微信支付偶尔出现system:access_denied,微信公众号开发分享出现system:access_denied,system:access_denied如何解决?微信WeixinJSBridge.invoke(‘xxx‘)API调用后出现报错,微信内部H5WeixinJSBridge.invokesystem:access_denied,使用微信jssdk时报ac

🏆 前端领域优质创作者 5145

正则文法和上下文无关文法

对于文法G=(V, T, S, P),如果产生式的形式如下:A -> xBA -> x其中A, B属于V,x属于T*,则称为右线性文法;相似的,如果产生式的形式如下:A -> BxA -> x则称为左线性文法。右线性文法和左线性文法统称为正则文法。正则表达式的表达能力等价于正则文法,正则表达式的定义如下:字母表中的任意字母是正则表达式,空串和空集也是正则表达式;

Goncely的专栏 2万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[XJTUSE编译原理] 第三章 上下文无关文法

[XJTUSE编译原理] 第三章 上下文无关文法

weixin_47692652的博客 2725

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

构造c语言的上下文无关文法,正则文法和上下文无关文法

对于文法G=(V, T, S, P),如果产生式的形式如下:A -> xBA -> x其中A, B属于V,x属于T*,则称为右线性文法;相似的,如果产生式的形式如下:A -> BxA -> x则称为左线性文法。右线性文法和左线性文法统称为正则文法。正则表达式的表达能力等价于正则文法,正则表达式的定义如下:字母表中的任意字母是正则表达式,空串和空集也是正则表达式;如果r, s...

weixin_39851279的博客 2285

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

形式语言与自动机——第三章 上下文无关文法与下推自动机

该章主要内容: 上下文无关文法(CFG) Chomsky范式和,Greibach范式 确定下推自动机、非确定下推自动机(Pushdown Automaton) 对任何CFA都能找到一种具有特有形式 的等价CFG(Context-Free Grammar) 上下文无关文法对应的识别器是下推自动机。 确定的下推自动机对应于上下文无关语言的一个子集(大部分的程序设计语言)。 3.1 推导树与二义性 ...

swallowblank的博客 3013

正则表达式和上下文无关文法

<br /><br />对于文法G=(V, T, S, P),如果产生式的形式如下:<br />A -> xB<br />A -> x<br />其中A, B属于V,x属于T*,则称为右线性文法;相似的,如果产生式的形式如下:<br />A -> Bx<br />A -> x<br />则称为左线性文法。右线性文法和左线性文法统称为正则文法。<br />正则表达式的表达能力等价于正则文法,正则表达式的定义如下:<br />字母表中的任意字母是正则表达式,空串和空集也是正则表达式;<br />如果r, s是正

train的专栏 6168

编译原理第二章笔记 -- 上下文无关文法

上下文无关文法:context-free grammar问题:如何描述语言定义:文法是描述语言的语法结构的形式规则(即语法规则)目的:解决语言的有穷说明问题,包含对语法的描述,但却不表达任何语义分为4类:0、1、2、3型文法与程序语言语法有关的是上下文无关文法一个上下文无关文法G是一个四元式(VT,VN,S,P)(V_T,V_N,S,P)(VT​,VN​,S,P),其中:VTV_TVT​:是非空有限集,它的每个元素是终结符号;VNV_NVN​:是非空有限集,它的每个元素是非终结符号; VT∩VN=ΦVT∪V

Qlz的博客 1701

编译原理 上下文无关文法

引言 学完了词法分析,我们知道词法分析器将正则表达式转换成词法单元流,但对于这个记号流我们不知道是否能由正确的文法产生,因此我们需要通过语法分析器来检测其合法性。语法分析器的输出是一棵语法分析树(无论显性还是隐性),并且进行一些语法纠错处理。语法分析的整个过程大概就是我们先定义一个语法,再用相应的算法来检测我们的词法单元流是否符合该语法。这里主要讨论上下文无关文法构成的语法和自顶向下、自底向上的语...

qq_30225253的博客 2339

编译原理---文法和语法分析

编译原理---文法与语法分析

2201_75328243的博客 2282

编译原理复习

第一章导论的图 NFA:只有一个唯一的开始状态 DFA:没有ε,对任何状态s和任何输入符号a,最多只有一条标记为a的边离开s。 NFA转化为DFA DFA的化简:初始化分:终态和非终态 NFA转化为正则表达式 正规式转化为NFA 语法分析 上下文无关文法的定义 一个上下文无关文法G是一个四元组(VT,VN,S,P),其中 VT是一个非空有限集合,其元素称为终结符。 VN是一个非空有限集合,其元素被称为非终结符,并有VT ∩ VN = 空集。 S是一个非终结符,称为开始符号,它定义的终结符

m0_50488845的博客 1133

自己动手开发编译器(六)上下文无关语言和文法

上回我们已经学习了语法分析第一阶段——词法分析的原理和工具,介绍了正则表达式、正则语言和DFA等工具。今次我们要开始涉及编译器前端最重要的阶段——语法分析。简单而言,这一步就要完整地分析整个编程语言的语法结构。上回说到词法分析的结果是将输入的字符串分解成一个个的单词流,也就是诸如关键字、标识符这样有特定意义的单词。一种完整的编程语言,必须在此基础上定义出各种声明、语句和表达式的语法规则。观察我们所

Embeded system Development 2101

DFA只有有限个状态,它没有办法追溯这种无限递归。所以,编程语言的表达式,并不是正则语言。我们要引入一种表现能力更强的语言——上下文无关语言。

很明显,这两种语义的计算结果是可以不一样的。一旦我们得到了语法分析树,就可以很容易地进行后续的语义分析,比如这个表达式的语义是“先将a和b代表的变量相加,再把所得的结果与c代表的变量相加”。那么语法分析树是怎么得到的呢,其实刚才的产生式推导过程,就可以顺便建立语法分析树,只要在展开非终结符的同时,在语法分析树中相应的节点下加入非终结展开的结果即可生成。目前流行的编译器开发方式是在语法分析阶段构造一棵真正的语法分析树,然后再通过遍历语法树的方法进行后续的分析,所以最左推导和最右推导的过程对我们来讲区别不大。

gk9m3Ld5m的博客 196

编译器实现(三)

1. 上下文无关文法及分析 上下文无关文法的规则是递归的。 识别这些结构的算法使用递归调用或显示管理的分析栈。经常使用的基本结构是一类树(分析树或语法树)。 算法大致可分为两种:自顶向下和由底向上 1.1 分析过程 分析函数将扫描程序生成的记号序列作为输入,并生成语法树作为输出: 编译器中更多是多遍,后面的遍将语法树作为他们的输入。 语法树的结构很大程度依赖语言特定的语法结构...

weixin_33726318的博客 200
下一篇: 软件文档之我见
LP学长
博客等级 码龄8年 12粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LP学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值