在许多编程语言中,字符串是一个标记。

例如:

 token               ::= '"' string
                       | digit nat

 string              ::= char string
                       | '"'

 nat                 ::= digit nat
                       | ϵ

这是某些编程语言的 token 语法的 LL(1) 语法。

当解析一个 string, ,不需要检查follow set,因为有一个 " 在每个的末尾 string.

与相比 nat, string 更容易解析。

我的问题是

有关于这种语法的官方术语吗?

谢谢。


编辑:

原来的语法有一些错误,感谢@rici指出我的错误。

有帮助吗?

解决方案

FOLLLOW 集不用于解析两者 string 或者 nat. 。在这两种情况下,解析器只需要确定输入是否在一组有效符号中。如果是 nat, ,有效符号为数字;如果是 string, ,它们是除 ". 。(在真实的语言中,解析器也会检查 \)。但在这两种情况下,检查都是必要的,并且没有好的标准来判断一个测试比另一个测试“更简单”。(实际上,这两项检查可能都是简单的表查找。所以它们的复杂度是 O(1)。)

仅当语法包含 ε 产生式时才需要 FOLLOW 集。即使如此,解析器的操作并不复杂。更复杂的是构建解析器,这只发生一次。这并不是什么大不了的事,但“无ε语法”这一点就足够值得注意了。我认为没有任何通用词汇可以描述显式终止重复和隐式终止重复之间的区别,并且无论如何,这种区别都很难严格定义。你的 string 将由解析器解析,该解析器使用不同的规则来收集尾随 ", ,并且两个解析器很可能最终得到相同的实现。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top