问题标签 [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.
programming-languages - (编程语言)如何判断这个语法是否有歧义
S -> () | (S) | 党卫军
这个语法有歧义吗?我如何判断这个语法是否有歧义?我学会了画 Parse 树。但是不知道怎么画。
if-statement - If then else CUP 中的歧义
我正在 CUP 中构建语法,但在定义 IF-THEN-ELSE 语句时遇到了障碍。
我的代码如下所示:
但 CUP 工具抱怨if_statement
.
我发现这篇文章描述了如何在不引入endif
标记的情况下消除歧义。
所以我尝试调整他们的解决方案:
可悲的是,CUP 抱怨如下:
为什么这不起作用?我如何解决它?
recursion - 完全左因子以下语法,使其适合在自顶向下编译器中使用
这里 S 是非终结符开始符号;A、B、C 是非终结符;x, y, 是终端符号
看过视频后,我了解了消除生产规则中左递归的简单示例,例如
但我不明白如何在上面显示的规则中消除左递归。谁能解释或指出我的解释方向?
grammar - 如何消除以下语法中的歧义?
我发现了一个类似的问题,但我不明白:http ://automatasteps.blogspot.co.id/2007/08/unambiguous-grammar.html
我如何将其更改为明确的?
我的弦是 bbaaa
grammar - BNF 语法关联性
我正在尝试了解左右关联语法的工作原理,我需要一些帮助。所以我决定举一个例子并要求澄清一下。基本上,我想为两个逻辑操作创建一个语法:and
+ implication
。我想让它成为and
左联想和implication
右联想。这是我到目前为止得到的。这个对吗?我觉得这可能是模棱两可的。(我还记住,and
它的优先级高于implication
)
compiler-construction - 漂亮的打印模棱两可的语法
我已经实现了解析器组合器,它可以解析可能包含歧义的语法。当语法不明确时会出现错误,但事实证明朝另一个方向前进会更加困难。问题是如何用最少的括号将抽象语法树漂亮地打印成可能不明确的语法。使用运算符优先级会有所帮助,但不是万能的。在相同的优先级内,问题仍然存在。
确切的运算符直到运行时才知道,并且在用户引入新运算符时可以在执行期间更改。我支持前缀、后缀和中缀(左、右和非关联)运算符。中缀左和后缀运算符同时在优先级上混合。这同样适用于中缀右和前缀运算符。运算符还可以嵌入完整的表达式,因此 if-then-else 和 if-then 都可以实现为前缀运算符。(尽管这可能不是明智之举。)
这是一个使用提到的 if-then-else 和 if-then 运算符的示例,这里假定它们处于相同的优先级。显然,该表达式if a then if b then c else d
是模棱两可的,因为它可以解释为if a then (if b then c) else d
or if a then (if b then c else d)
。在漂亮打印期间,即使两个运算符处于相同的优先级并且具有兼容的关联性(右侧),算法也应该知道使用括号。
一个警示性示例:添加另一个前缀运算符 say inc,其优先级与 if-then-else 和 if-then 相同。现在假设一个任意集合P ⊂ H x O
,其中H
是算子孔O
集,是算子集。该集合是一种关系,它告诉何时需要添加括号。检查表达式if a then inc b else c
和if a then (inc if b then c) else d
。第一个要求(if-then-else.2, inc)
不参加P
,第二个要求相反。这与问题可以通过某种关系或顺序解决的假设相矛盾。可以尝试(inc.1, if-then)
在P
做后一个表达式时说 let is if a then inc (if b then c) else d
,但随后inc if a then b
变成inc (if a then b)
了有太多括号的。
据我所知,语法是上下文无关的。不过,我对定义有点摇摆不定。
解析器松散地基于此处的一篇论文。我正在使用 Haskell。
更新:正如 NieDzejkob 所证明的,这个问题通常是无法解决的。我愿意接受可能失败的算法。如果这还不足以使事情变得实用,那么一个好的启发式方法就可以了。
c# - 为什么编译器找不到正确的类型?
我有一个同名的方法和一个类。在一种情况下,编译器知道我正在使用类名,但在另一种情况下则不然:
错误:
我得到与静态属性相同的错误:
如果编译器在上下文中理解Foo
innew Foo
是一个类,为什么它不能理解Foo
innameof(Foo.Bar)
也是一个类?Foo
如果是一种方法,则此表示法毫无意义。
bison - Bison如何在没有移位减少冲突的情况下描述语法中的可选语法?
我有一个用语法描述的文件。它有一个部分可以包含一种或两种内容,并且可以按任意顺序排列:
要不就
或者
或任何组合,出现次数不限。type_a_thing 和type_b_thing 都有明确定义的结构。我已经设法描述了这一点,以便解析器工作,但我仍然得到 shift/reduce 错误。我在这里上传了一个最小的例子:
https://github.com/waszil/minimal_bison_parser
这是解决这个问题的正确方法吗?我做错了吗?我为此尝试了很多东西,检查了带有详细标志的野牛生成的.output文件,但我不知道应该如何正确完成。它有点类似于 Flex&Bison O'Reilly 书中描述的嵌套列表语法问题,但不一样
感谢您的任何提示!
parsing - ANTLR4 语法在输入时没有可行的替代方案
我正在做一个项目,我必须为以下语法创建一个解析器:
我正在尝试阅读这段代码:
我曾经使用 grun 生成解析器树,如下所示:
grun T 理论 oo.spthy -gui
但是每次我尝试生成解析器树时,都会出现以下错误:
似乎语法有问题,但我无法弄清楚。你有什么线索吗?
grammar - 将模棱两可的语言转换为明确的
我得到了一项家庭作业,将以下语法转换为明确的。
其中 A 和 B 是非终结符, STRING 和 DOUBLE 是非终结符。
我可以得出它是模棱两可的,因为可以为字符串构造两个不同的解析树,例如:
STRING @ STRING @ DOUBLE(STRING)
.
到目前为止,我有:
但是它并不像字符串那样完整,例如:
字符串@双(字符串)@字符串
无法制作。我如何将此语法转换为明确的?