问题标签 [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.

0 投票
1 回答
135 浏览

parsing - 带有 let 和加法的表达式的明确语法

对于带有letadd的表达式语言,什么是等同于以下歧义语法的明确语法?

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 }

0 投票
1 回答
356 浏览

parsing - 使用 Sablecc 转移/减少冲突

我应该使用 Sablecc 为 MiniPython 编写一个 .grammar 文件。我遇到了这些转变/减少冲突:

一些令牌是:

我的 .grammar 文件的一部分是这样的:

这是我尝试消除左递归后的语法。我注意到如果我assert从生产中删除规则something,我不会遇到任何冲突。此外,{empty}exprsn,tpwrmltprules 中删除规则不会给我带来任何冲突,但我认为这不是解决此问题的正确方法。

任何提示将不胜感激。

更新:这是整个语法,在删除左递归之前,根据要求:

现在的移位/减少冲突是:

0 投票
1 回答
500 浏览

parsing - 算术表达式和赋值的 LL1 语法

我想为算术方程和变量赋值设计一个 LL1 语法。我从这个语法开始:

我对算术表达式有一个明确的语法:

但是,我不确定如何将变量分配合并到 E 产品中。

我之前的尝试是:

0 投票
2 回答
286 浏览

scala - 关键字和标识符冲突编写词法分析器?(斯卡拉库)

我尝试过 fastparse、parboiled2 和 scala-combinators。他们在定义 LEXER 时都有这个问题:

当我根据输入运行它们时,"leto"它们会产生[LET_KEYWORD,IDENTIFIER(o)].

我希望其中一些库能给我这样的行为:

如果输入是,"let"那么它通过选择第一个定义的规则来解决歧义,因为它更相关。如果输入是"leto"那么没有歧义并且只产生IDENTIFIER(leto). 就是在 ANTLR 中描述的行为

0 投票
1 回答
184 浏览

intellij-idea - 如何解决在语法工具包中使用关键字作为标识符的歧义

我一直在尝试为 Grammarkit 编写 graphql 语言语法,但我发现自己在很长一段时间内都陷入了歧义问题。graphql 中的关键字(例如:、、、typeimplementsscalar可以是类型或字段的名称。IE

起初我tokens在 bnf 中定义了这些关键字,但这意味着上面的情况是无效的。但是如果我在描述规则时直接写这些关键字,就会导致语法上的歧义。我根据下面的语法看到的一个问题示例是,如果您定义了这样的内容

PSI 查看器告诉我,在@cool它的位置期待 a DirectiveAddtlLocation,这是我什至在标量规则中都没有引用的规则。有没有人熟悉语法包并遇到过这样的事情?我真的很感激一些见解。谢谢你。

这是我上面提到的错误示例的语法摘录。

0 投票
0 回答
149 浏览

compiler-construction - 如何将歧义语法转换为明确语法

我有一个我认为是模棱两可的语法。我不知道如何消除歧义并将其转换为明确的语法。

这就是我想出的:

这是对的吗?

0 投票
1 回答
88 浏览

grammar - 如何将这种歧义语法转换为非歧义语法?

我已经在 2 和 4 上尝试过左因式分解,但在我|的许多作品中都被困住了。

0 投票
1 回答
325 浏览

automata - 查找 s-grammar(简单语法)

为以下语言找到一个简单的语法(又名 s-grammar):

L={(ab) 2m b :m>=0}

[我这样做了,但这是错误的]

S->aASBB|b

一个->一个

B->b

0 投票
0 回答
19 浏览

ambiguous-grammar - 下面的语法是否有歧义,如果是下面的明确语法是什么

我知道如何消除制作中的歧义,E但是 的存在I让我困惑于解决歧义

0 投票
1 回答
79 浏览

context-free-grammar - 为什么这是一个模棱两可的语法?

我有以下练习:

说明这个语法有歧义:

根据我读过的语法的理论,如果:

所以,我无法确定一个确认的字符串1),所以我试过了2)。据我所知,只需要2个反身推导就可以让我的语法模棱两可?

例如:

正如我所描述的那样,这是正确的还是需要更详细的信息?

PD:有没有什么技巧可以让生成两个三的字符串?