- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试解决看似简单的移位/归约冲突,但无济于事。当然,如果我忽略冲突,解析器就可以正常工作,但如果我重新组织规则,我会感觉更安全。在这里,我将相对复杂的语法简化为单个冲突:
statement_list
: statement_list statement
|
;
statement
: lvalue '=' expression
| function
;
lvalue
: IDENTIFIER
| '(' expression ')'
;
expression
: lvalue
| function
;
function
: IDENTIFIER '(' ')'
;
通过 yacc 中的详细选项,我得到了描述上述冲突状态的输出文件:
state 2
lvalue -> IDENTIFIER . (rule 5)
function -> IDENTIFIER . '(' ')' (rule 9)
'(' shift, and go to state 7
'(' [reduce using rule 5 (lvalue)]
$default reduce using rule 5 (lvalue)
感谢您的帮助。
最佳答案
问题在于,这需要 2 个 token 前瞻才能知道何时到达语句末尾。如果您有以下形式的输入:
ID = ID ( ID ) = ID
解析器移动第二个 ID 后(先行是 (
),它不知道这是否是第一个语句的结尾((
是一个语句的开头)第二条语句),或者这是一个函数。因此它会转移(继续解析函数),这对于上面的示例输入来说是错误的。
如果扩展function
以允许括号内的参数和表达式
以允许实际表达式,事情会变得更糟,因为所需的前瞻是无限制的——解析器需要一直到第二个 =
以确定这不是函数调用。
这里的基本问题是没有辅助标点符号来帮助解析器找到语句的结尾。由于作为有效语句开头的文本也可能出现在有效语句的中间,因此很难找到语句边界。
关于parsing - 由于前瞻标记限制而转移/减少 yacc 中的冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4690558/
我有一个看起来像这样的字符串: text = "9) 9 的文本\r\n10) 10 的文本\r\n11) 11 的文本\r\n12) ...\r\n123) 123 的文本" 我正在尝试将其拆分如下
下一代的 3D Tiles 前瞻 原文:Introducing 3D Tiles Next, Streaming Geospatial to the Metaverse 原文发布时间:2021年11月
我有一个使用正则表达式回顾的 string.replace() 函数。 myString.replace(/(?
我是一名优秀的程序员,十分优秀!