问题标签 [ambiguous-grammar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parsing - 带有 let 和加法的表达式的明确语法
对于带有let和add的表达式语言,什么是等同于以下歧义语法的明确语法?
E ⇒ 让 id = E 在 E
E ⇒ E + E
E ⇒ 数字
应解决歧义,以便:
- 加法是左结合的
- 当出现在右边时,加法的优先级高于 let 表达式
- 当出现在左侧时,加法的优先级低于 let 表达式
使用大括号来显示子表达式的分组,以下说明了应如何解释表达式:
num + num + num
=>{ num + num } + num
let id = num in num + num
=>let id = num in { num + num }
num + let id = num in num
=>num + { let id = num in num }
parsing - 使用 Sablecc 转移/减少冲突
我应该使用 Sablecc 为 MiniPython 编写一个 .grammar 文件。我遇到了这些转变/减少冲突:
一些令牌是:
我的 .grammar 文件的一部分是这样的:
这是我尝试消除左递归后的语法。我注意到如果我assert
从生产中删除规则something
,我不会遇到任何冲突。此外,{empty}
从exprsn
,tpwr
和mltp
rules 中删除规则不会给我带来任何冲突,但我认为这不是解决此问题的正确方法。
任何提示将不胜感激。
更新:这是整个语法,在删除左递归之前,根据要求:
现在的移位/减少冲突是:
parsing - 算术表达式和赋值的 LL1 语法
我想为算术方程和变量赋值设计一个 LL1 语法。我从这个语法开始:
我对算术表达式有一个明确的语法:
但是,我不确定如何将变量分配合并到 E 产品中。
我之前的尝试是:
scala - 关键字和标识符冲突编写词法分析器?(斯卡拉库)
我尝试过 fastparse、parboiled2 和 scala-combinators。他们在定义 LEXER 时都有这个问题:
当我根据输入运行它们时,"leto"
它们会产生[LET_KEYWORD,IDENTIFIER(o)]
.
我希望其中一些库能给我这样的行为:
如果输入是,"let"
那么它通过选择第一个定义的规则来解决歧义,因为它更相关。如果输入是"leto"
那么没有歧义并且只产生IDENTIFIER(leto)
. 这就是在 ANTLR 中描述的行为
intellij-idea - 如何解决在语法工具包中使用关键字作为标识符的歧义
我一直在尝试为 Grammarkit 编写 graphql 语言语法,但我发现自己在很长一段时间内都陷入了歧义问题。graphql 中的关键字(例如:、、、type
)implements
也scalar
可以是类型或字段的名称。IE
起初我tokens
在 bnf 中定义了这些关键字,但这意味着上面的情况是无效的。但是如果我在描述规则时直接写这些关键字,就会导致语法上的歧义。我根据下面的语法看到的一个问题示例是,如果您定义了这样的内容
PSI 查看器告诉我,在@cool
它的位置期待 a DirectiveAddtlLocation
,这是我什至在标量规则中都没有引用的规则。有没有人熟悉语法包并遇到过这样的事情?我真的很感激一些见解。谢谢你。
这是我上面提到的错误示例的语法摘录。
compiler-construction - 如何将歧义语法转换为明确语法
我有一个我认为是模棱两可的语法。我不知道如何消除歧义并将其转换为明确的语法。
这就是我想出的:
这是对的吗?
grammar - 如何将这种歧义语法转换为非歧义语法?
我已经在 2 和 4 上尝试过左因式分解,但在我|
的许多作品中都被困住了。
automata - 查找 s-grammar(简单语法)
为以下语言找到一个简单的语法(又名 s-grammar):
L={(ab) 2m b :m>=0}
[我这样做了,但这是错误的]
S->aASBB|b
一个->一个
B->b
ambiguous-grammar - 下面的语法是否有歧义,如果是下面的明确语法是什么
我知道如何消除制作中的歧义,E
但是 的存在I
让我困惑于解决歧义
context-free-grammar - 为什么这是一个模棱两可的语法?
我有以下练习:
说明这个语法有歧义:
根据我读过的语法的理论,如果:
所以,我无法确定一个确认的字符串1)
,所以我试过了2)
。据我所知,只需要2个反身推导就可以让我的语法模棱两可?
例如:
正如我所描述的那样,这是正确的还是需要更详细的信息?
PD:有没有什么技巧可以让生成两个三的字符串?