猿问

如何解决 LR(1) 文法定义中的歧义?

我正在用 OCaml 编写 Golang 编译器,参数列表让我有点头疼。在 Go 中,您可以通过以下方式对相同类型的连续参数名称进行分组:

func f(a, b, c int)  ===  func f(a int, b int, c int)

你也可以有一个类型列表,没有参数名称:

func g(int, string, int)

两种款式不能混搭;要么所有参数都被命名,要么没有。

我的问题是,当解析器看到逗号时,它不知道该怎么做。在第一个示例中,是a类型的名称还是带有更多变量的变量的名称?逗号有双重作用,我不知道如何解决这个问题。

我正在使用 OCaml 的 Menhir 解析器生成器工具。


慕容708150
浏览 228回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答