- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我继承了一个 ANTLR 语法,现在我需要编写一个很好的、古老的、类似 YACC/BISON 的解析器(具体来说,我使用 PLY for python)。有许多奇怪的规则,我现在正在努力解决以下问题:
factor : ('(' expr ')' | procedure | variable) ('.' variable | call)* '!'?
目前,我只有第一部分的规则,它们是
factor : '(' expr ')'
| procedure
| variable
以及 PLY 规则:
def p_factor_1(self, p):
""" factor : LPAREN expr RPAREN """
p[0] = p[2]
def p_factor_2(self, p):
""" factor : variable
| procedure_definition
"""
p[0] = p[1]
我怎样才能把最上面的部分变成真正适合 PLY 的东西?我需要合理的规则,以便我可以为单个 expr、过程、变量构造一个 AST 节点,然后还可以为变量访问和链式调用的链接构造一些节点。更糟糕的是还有'!' .原始语法的创建者这样做是为了给予最高优先级的因式分解,但对于转换来说,这是一个彻头彻尾的痛苦。
最佳答案
有条不紊地做:)
V → ω X V → V X V → ω
V → ω X? ⇒ V → X* ⇒ V → ω | ζ ⇒
V → ω V → V → ζ
当然,如果您必须在单个产品中执行上述多个操作,则需要引入新的非终端。
所以:
factor : ('(' expr ')' | procedure | variable) ('.' variable | call)* '!'?
一个。引入新的非终端:
factor : factor-prefix factor-suffix '!'?
factor-prefix : '(' expr ')' | procedure | variable
factor-suffix : factor-continue*
factor-continue : '.' variable | call
B.按以上规则替换
factor : factor-prefix factor-suffix '!'?
⇒
factor : factor-prefix factor-suffix '!'
factor : factor-prefix factor-suffix
factor-prefix : '(' expr ')' | procedure | variable
⇒
factor-prefix : '(' expr ')'
factor-prefix : procedure
factor-prefix : variable
factor-suffix : factor-continue*
⇒
factor-suffix : factor-suffix factor-continue
factor-suffix :
factor-continue : '.' variable | call
⇒
factor-continue : '.' variable
factor-continue : call
关于python - 将自上而下的文法规则转换为 BNF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20595250/
我在 OSX 10.10 上使用 XCode 6.1.1 我有一个以下 cocoa 窗口 我无法仅使用 IB 制作垂直自上而下的 slider 。 (B View 中的第二个 slider ) 如示例
我目前正在类里面学习自上而下的 C 编程,但不知何故我无法真正掌握它的窍门。 我一直在尝试通过这个编程练习来学习它,你必须根据某人的到达时间(以及以公里/小时为单位的速度和以公里为单位的距离)来计算某
元素的合并排序过程步骤是什么:20 47 15 8 9 4 40 30 12 17 我遇到过这个...... Pass1: |20 47| |8 15| |4 9| |30 40| |12 17| P
问题 - 给定一个长度为 N 的整数数组 A,找到先递增后递减的最长子序列的长度。输入:[1, 11, 2, 10, 4, 5, 2, 1] 输出:6 解释:[1 2 10 4 2 1]是最长的子序列
我是来自 2D SpriteKit 的 SceneKit 新手,并试图弄清楚如何调整相机,使其面朝下位于世界顶部。我的位置部分是正确的,但是在旋转时我遇到了困难。如果我调整X,是or Zaxis, n
这是我的笨蛋吗?的一天。以下代码不会按顺序运行(如从上到下),它从顶部跳到底部然后运行中间。另一方面,如果我放一个 Console.WriteLine(); 它将自上而下运行。和 Console.Re
昨天 我正在玩 CoordinatorLayout 和 TabView 1) 我的目标是什么? CoordinatorLayout 和 TabView 当我向上滚动时一个 View 如.GIF所示 向
我正在查看 this example它使用簇布局将 X 和 Y 坐标分配给树状图上的节点。我怎么知道cluster垂直布局,自上而下,而不是默认的从左到右? 最佳答案 对于example你链接,只是翻
我有一个 Kendo UI 图表,在 3 个不同的值轴上显示 3 个系列的数据。 “广告位置”值轴是反向的,1 是可能的最高值(根据图像)。 如您所见,这会导致“广告位置”系列“自上而下”呈现。 有谁
注意:我并不是要将 3D 对象投影到 2D 相机 View 图像(对此有很多答案)。 它甚至比这更简单:我有一个 3D 模型,比如说,一条街道。我想把它变成街道 map 。所以这是一个简单的自上而下/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
我正在自动化我们通常每月在 Word 中手动输入一次的报告,它的目标用户要求它总是看起来完全符合他们指定的方式 - 它需要有两个内容列,像 MS Word/a 一样换行报纸 - 第一栏的结尾换行到第二
我是一名优秀的程序员,十分优秀!