问题标签 [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 投票
2 回答
3673 浏览

c - 语法中的左递归导致冲突

在整个 Bison 语法中,我都在使用右递归,并且我读过左递归更好,因为它不必先构建整个堆栈。

但是,当我尝试在其中任何一个上切换到左递归时,我总是会遇到很多冲突,我不明白为什么。

谁能告诉我一个通用示例,说明使用左递归而不是右递归会导致冲突(当右递归不会导致冲突时)。那么在切换到左时需要做什么来纠正这样的冲突。我认为一个基本的例子对我的帮助不仅仅是纠正我自己的语法。

编辑:
但我想无论如何我都应该包含一个特定的示例,因为我的理解还不够完整:-) 将“列表分隔符命令”更改为“命令分隔符列表”可以解决冲突。

0 投票
12 回答
4930 浏览

programming-languages - 为什么很多编程语言把类型*放在*变量名之后?

我刚刚在 Go 常见问题解答中遇到了这个问题,它让我想起了困扰我一段时间的事情。不幸的是,我真的不明白答案是什么。

似乎几乎所有非 C 类语言都将类型放在变量名之后,如下所示:

纯粹出于好奇,这是为什么呢?选择其中一个有优势吗?

0 投票
1 回答
782 浏览

parsing - 使用 ANTLR 容忍格式错误的语句(例如,用于代码完成)

我有一个用于简单 DSL 的 ANTLR 语法,并且在没有语法错误的情况下一切正常。然而,现在我需要支持自动完成机制,我需要从我的树语法中获得可能的完成,这些语法对属性、函数等执行基本类型检查。

问题是,ANTLR 不是在本地statement级别报告语法错误,而是在解析树的更远处,例如在programorfunction级别。因此,而不是看起来像的 AST

我在树的顶部得到垃圾节点,因为未能匹配statement规则“冒泡”并阻止function规则匹配。

有没有办法编写一个包含“包罗万象”子句的规则来吃掉意想不到的令牌?

我在想类似的东西:

AST 中可能有任意数量的垃圾节点,但垃圾之前(最好是之后)的所有内容都应该是健全的。

我会很感激任何提示/建议/指针/等。我正在使用 ANTLR v3,Java 目标。

0 投票
2 回答
335 浏览

xml - 从一组属性生成 XML 路径

我有一组共享相同模式的 XML 文档。(如果重要的话,它们是带有语义标签的 SAPI 语法。)我可以使用文档来匹配文本字符串,返回一组具有已知值的属性。

我的问题是我想获取一组属性值并从语法生成一个字符串(当提交给语法时)将产生相同的一组属性值。更复杂的是,不同的语法具有不同顺序的标签(语法适用于不同的自然语言),所以我不能直接进行树遍历。

有人有解决这个问题的好方法吗?

编辑: 这是一组示例语法:

语法 1(英语):

语法 2:(德语)

我想要做的是指定“NumberCommand = 5”并从英语语法中获得“选择5”,从德语语法中获得“funf klicken”。

0 投票
2 回答
1688 浏览

grammar - 为什么我在使用 flex 和 yacc 编写的程序中出现语法错误?

我制作了一个应该识别简单语法的程序。当我输入我认为应该是有效的陈述时,我得到一个错误。具体来说,如果我输入

诠释一个;

诠释 b;

它不起作用。在我输入 int a; 程序回响;由于某些原因。然后当我输入 int b; 我收到语法错误。

lex 文件:

yacc 文件:

0 投票
1 回答
205 浏览

grammar - 如何将文字从 flex 返回到 yacc?

在我的 yacc 文件中,我有如下内容:

ID、NUM、INT 和 VOID 是从 flex 返回的标记,因此 yacc 识别它们没有问题。问题是上面有'['和';'之类的东西。当这些都被flex识别出来了,应该给yacc返回什么?

0 投票
2 回答
1201 浏览

grammar - 我用 flex/yacc 制作的程序并不总是能识别标识符

我制作了一个应该识别简单语法的程序。当我输入我认为应该是有效的陈述时,我得到一个错误。具体来说,如果我从一个标识符开始,我会自动得到一个语法错误。但是,我注意到如果标识符前面带有“int”,则使用标识符不会产生错误。如果 a 是一个标识符,那么如果我输入 'int a;' 还行吧。但是如果我输入 'a = 3' 我会得到一个错误。只需键入 a 本身就会产生错误。

lex 文件:

yacc 文件

0 投票
2 回答
776 浏览

syntax - 我的语法有什么问题

我尝试将以下内容输入到我的 yacc 解析器中:

根据 yacc 文件中定义的内容,它看起来对我有效,但在返回后我收到“语法错误”消息。这是为什么?

yacc 文件:

0 投票
1 回答
362 浏览

grammar - 此 yacc 代码中是否存在移位/减少错误?

我收到来自 yacc 的消息,说存在转移/减少冲突。我认为它来自 yacc 文件的这一部分。

你能看出冲突吗?如何修复?

0 投票
5 回答
602 浏览

scala - 语法、Scala 解析组合器和无序集

我正在编写一个将接受各种“命令”字符串的应用程序。我一直在查看 Scala 组合器库来标记命令。我发现在很多情况下我想说:“这些标记是无序的集合,因此它们可以按任何顺序出现,有些可能不会出现”。

以我目前的语法知识,我将不得不定义所有序列组合(伪语法):

所以我的问题是,考虑到 tokenA-C 是独一无二的,是否有更短的方法来使用语法定义一组任意顺序?