- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 Grammar: difference between a top down and bottom up? 的后续问题
我从这个问题中了解到:
对于这个语法(所有可能的数学公式):
E -> E T E
E -> (E)
E -> D
T -> + | - | * | /
D -> 0
D -> L G
G -> G G
G -> 0 | L
L -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
这可以被自上而下和自下而上的解析器读取吗?
你能说这是自上而下的语法还是自下而上的语法(或两者都不是)?
<小时/>我问这个问题是因为我有一个作业问题要问:
"Write top-down and bottom-up grammars for the language consisting of all ..." (different question)
我不确定这是否正确,因为似乎不存在自上而下和自下而上的语法。有人能澄清一下吗?
最佳答案
这种语法很愚蠢,因为它将词法分析和解析合而为一。但好吧,这是一个学术例子。
自下而上和自上而下的问题在于,它们具有特殊的极端情况,很难用正常的 1 展望来实现。我可能认为你应该检查它是否有任何问题并更改语法。
为了理解语法,我写了一个正确的 EBNF
expr:
expr op expr |
'(' expr ')' |
number;
op:
'+' |
'-' |
'*' |
'/';
number:
'0' |
digit digits;
digits:
'0' |
digit |
digits digits;
digit:
'1' |
'2' |
'3' |
'4' |
'5' |
'6' |
'7' |
'8' |
'9';
我特别不喜欢规则数字:数字数字
。目前尚不清楚第一个数字从哪里开始,第二个数字从哪里结束。我会将规则实现为
digits:
'0' |
digit |
digits digit;
另一个问题是 number: '0' | digital digitals;
这与 digits: '0'
和 digits: digital;
冲突。事实上,这是重复的。我会将规则更改为(删除数字):
number:
'0' |
digit |
digit zero_digits;
zero_digits:
zero_digit |
zero_digits zero_digit;
zero_digit:
'0' |
digit;
这使得语法 LR1(左递归,向前看)和上下文无关。这是您通常会提供给解析器生成器(例如 bison)的内容。由于 bison 是自下而上的,因此这是自下而上解析器的有效输入。
对于自上而下的方法,至少对于递归体面来说,左递归有点问题。如果您愿意,可以使用回滚,但对于这些,您需要 RR1(右递归前瞻)语法。为此,请交换递归:
zero_digits:
zero_digit |
zero_digit zero_digits;
我不确定这是否能回答您的问题。我认为这个问题的表述很糟糕并且具有误导性;我以编写解析器为生......
关于语法:自上而下和自下而上的区别? (例子),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3182243/
看起来很简单,但我没有任何成功。 非常简单,使用 AHK,我想从下往上获取工作表中最后一行的编号,其中包含一个值。我不能自上而下,因为有些行是空白的,所以必须自下而上。 我的代码遍历选定文件夹中的所有
元素的合并排序过程步骤是什么:20 47 15 8 9 4 40 30 12 17 我遇到过这个...... Pass1: |20 47| |8 15| |4 9| |30 40| |12 17| P
我正在尝试将脚本添加到我网站上的一个页面,这是一种过渡效果,其中 div 在 View 中从下向上移动。我成功地将完全相同的脚本添加到另一个页面并且它有效,但由于某种原因,它在另一个页面上不起作用。我
我正在使用 WIC (Windows Imaging Component) 来解码图像文件并访问像素数据。我试图找出像素顺序(即自下而上或自上而下)。 我用 IWICImagingFactory::C
我想在 Reporting Services 的文本框中垂直自下而上地显示我的文本。我已经可以通过转到文本框的 WritingMode 属性并切换到 'tb-rl' 使其自上而下,但没有自下而上的选项
我是一名优秀的程序员,十分优秀!