gpt4 book ai didi

parsing - 执行语义操作时 Ocamlyacc token 不可见

转载 作者:行者123 更新时间:2023-12-02 14:13:07 25 4
gpt4 key购买 nike

我使用 ocamlyacc 作为一个小型解析器,它还对大多数解析规则执行一些语义操作。

我在一开始就定义了一组标记:

%token T_plus
%token T_minus
%token <int> T_int_const

%left T_plus T_minus

执行语义操作的解析器规则如下:

exp:  exp T_plus exp
{
checkType T_plus $1 $3
}

其中 checkType 是外部辅助函数。但是,我收到了这个奇怪的警告(它指的是我的 Parser.mly 文件中的一行)

 warning: T_plus was selected from type Parser.token. 
It is not visible in the current scope,
and will not be selected if the type becomes unknown.

我在 ocamlyacc 手册中没有找到任何相关信息。有没有人遇到过类似的错误?为什么 token 在语义操作的范围内不可见?

最佳答案

不可能猜测你这边出了什么问题,因为你没有透露足够的信息。我可以猜测,您以某种方式误读了错误消息,问题出在另一个文件中。例如,以下文件:

%{
let f PLUS _ = ()
%}

%token PLUS
%left PLUS

%start exp
%type <unit> exp

%%

exp : exp PLUS exp {f PLUS $1}

编译任何问题或警告

ocamlbuild Parser.byte

我只能建议查看生成的 Parser.ml 并看看那里发生了什么。

一般来说,此消息意味着您引用的构造函数未进入作用域。在 Parser.mly 中,标记始终位于范围内,因此您在该文件中看不到此错误。通常,您可以在词法分析器中执行此操作。因此,请确保您的词法分析器的介绍部分已打开解析器

关于parsing - 执行语义操作时 Ocamlyacc token 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31699101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com