首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于左因式分解的自动语法转换和左递归删除

用于左因式分解的自动语法转换和左递归删除
EN

Stack Overflow用户
提问于 2013-06-23 14:08:53
回答 1查看 1.8K关注 0票数 3

标准方法可以很容易地将不属于LL(1)的上下文无关语法转换为等效语法。是否有任何工具可以使此过程自动化?

在下面的示例中,我对非终端使用大写字母,对终端使用小写。

下列左递归非终端:

代码语言:javascript
运行
AI代码解释
复制
A  -> A a | b

可以转换为右递归形式:

代码语言:javascript
运行
AI代码解释
复制
A  -> b A'
A' -> NIL | a A'

注意,虽然左递归生成规则确保表达式与左关联,类似于右递归生成;因此语法修改也将改变表达式的相联性。

另一个问题是间接的左递归,例如:

代码语言:javascript
运行
AI代码解释
复制
A -> B a
B -> A b

左因式分解也用于确保解析器只需要一个前瞻性令牌。以下产品必须通过两个令牌向前看:

代码语言:javascript
运行
AI代码解释
复制
A  -> a b | a c

这也可以重新分解;以便:

代码语言:javascript
运行
AI代码解释
复制
A  -> a (b | c)

是否有任何软件工具可以使这些语法转换自动化,从而产生一个适用于LL(1)解析器的等价语法?

EN

回答 1

Stack Overflow用户

发布于 2013-06-27 12:39:07

Haskell语法组合器库这里允许将语法转换为非左递归形式。但是,输入语法必须是https://en.wikipedia.org/wiki/Parsing_expression_grammar

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17265798

复制
相关文章
消除文法的左递归
其中,β是不以P开头的符号串。那么,我们可以把P的规则改写为如下的非直接左递归形式:
里克贝斯
2021/05/21
4.1K0
消除文法的左递归
Python 之父的解析器系列之五:左递归 PEG 语法
声明 | 本翻译是出于交流学习的目的,基于 CC BY-NC-SA 4.0 授权协议。为便于阅读,内容略有改动。
Python猫
2019/09/10
8440
递归查找文件和递归删除文件
还可以利用以上的方法先得到硬盘的总大小然后再减去硬盘的剩余可用空间大小,就可以得到硬盘的已用大小。
端碗吹水
2020/09/21
1.7K0
递归查找文件和递归删除文件
LeetCode 404. 左叶子之和(递归)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sum-of-left-leaves 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2020/07/13
3190
LeetCode 404. 左叶子之和(递归)
小程序 — 实现左滑删除效果②
(1)在上一章中,我们给movable-view绑定了一个bindchange事件,事件名为onChange,这个事件是干吗的呢?
Ewall
2018/09/30
1.2K0
小程序 — 实现左滑删除效果②
小程序 — 实现左滑删除效果①
(1)movable-area这个就是定义了一个移动的区域,跟普通的<view></view>的含义是一样的,不同在于,接着往下看;
Ewall
2018/09/30
2.7K0
小程序 — 实现左滑删除效果①
Kubernetes 1.24的删除和弃用
随着 Kubernetes 的发展,特性和 API 会定期给重新访问和删除。新的特性可能会提供一种替代的或改进的方法,来解决现有的问题,激励团队去除旧的方法。根据Kubernetes 弃用策略[1],旧的 API 首先被弃用(deprecated),然后被删除(removed)。
CNCF
2022/04/19
1.6K0
javascript 树状结构的转换(递归)
其中 props {id:'',label:'',children:[]}是不能项elementui中可以自己传入自己定义key值,
天天_哥
2019/10/24
1.3K0
Linux下删除指定小大的文件和指定缀名的文件(递归删除)
ha_lydms
2023/08/09
3360
自顶向下分析:解决回溯及无限循环问题
当我们尝试使用E -> E + TE \Rightarrow E + T,最终导致无限循环。
灯珑LoGin
2023/10/18
4660
自顶向下分析:解决回溯及无限循环问题
微信小程序左滑删除效果的实现
今天我们说下微信小程序左滑删除效果的实现,现在市场上很多APP都在使用这个效果,一个listView页面,向左滑动一条item时,右侧会出现一个删除或者其他的选项,用户体验非常好,操作起来十分方便,今天我们使用微信小程序来实现这个效果....... 先看效果 先看效果 1、当向左滑动时,item跟随手指像左移动,同时右侧出现两个可点击的按钮 2、当滑动距离大于按钮宽度一半松开手指时,item自动滑动到左侧显示出按钮,小于一半时item自动回到原来的位置,隐藏按钮。 思路 1、首先页面每个item分为上下两
用户1097444
2022/06/29
1.4K0
微信小程序左滑删除效果的实现
小程序 — 实现左滑删除效果(列表)③
首先我们初始化一个list列表并为其添加数据,这个列表有两个值分别为标题文字title和初始的偏移量x:
Ewall
2018/09/30
1.1K0
小程序 — 实现左滑删除效果(列表)③
Java转C++:基本理念和语法的转换
将Java代码转换为C++代码就是一种语言间的映射。尽管两者都是面向对象的编程语言,但在一些编程理念和语法规则上却存在明显差异。在这里幅篇,我们主要从对象和类、内存管理、异常处理等方面进行深入分析和示例展示。
很酷的站长
2023/10/02
9330
Java转C++:基本理念和语法的转换
递归删除指定文件-目录
import os import shutil del_list = [] def del_svn(f): fs = os.listdir(f) for f1 in fs: tmp_path = os.path.join(f, f1) if not os.path.isdir(tmp_path): # print('文件: %s' % tmp_path) pass else:
前端小鑫同学
2022/12/24
2.1K0
递归删除文件(支持通配符)
一直想做一个类似 Windows 命令行中 del 命令删除文件的功能,它支持 环境变量,通配符,可以递归,后来发现自己写这么一个小功能还真的不是一件容易的事情,没办法为了着急使用先临时做了一个小版本。代码有些缺憾。 不支持环境变量 不支持固定后缀文件递归删除 // example.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> #include <iostream> BOOL DeleteFiles(const std
我与梦想有个约会
2018/06/08
1.2K0
递归删除某个格式文件和查看目录大小
递归删除当前目录下的所有.o格式的文件并打印记录。 find . -name '*.o' -type f -print | xargs rm -rf 同上(方法2)。 find . -name "*.o" -type f -print -exec rm -rf {} \; 获取test目录的磁盘占用大小。 du -sh test
Qt君
2023/03/17
1K0
递归删除某个格式文件和查看目录大小
点击加载更多

相似问题

左因式分解&删除左递归JavaCC

10

删除左递归语法

11

消除左递归,e,左因式分解?

10

删除语法中的左递归

20

帮助左分解语法以删除左递归

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文