如何正确使用Menhir的--interpret调试多文件解析器?
解决Menhir多文件下--interpret调试的问题
错误原因分析
- 你之前把
tokens.mly作为主文件传入命令,而它仅包含令牌定义,没有语法规则和起始符号,因此Menhir报错找不到起始符号。 - 添加
--only-tokens后,Menhir仅处理令牌定义,不会加载parser.mly中的语法逻辑,所以直接退出,无法进入调试模式。
正确操作方式
Menhir的--interpret需要以包含起始符号和语法规则的parser.mly作为主文件,同时加载tokens.mly的令牌定义,有两种可行方式:
方式一:在语法文件中引入令牌定义
在parser.mly的开头添加如下语句,直接引入令牌文件的内容:
%include "tokens.mly"
然后执行调试命令:
menhir --interpret parser.mly
方式二:命令行同时传入两个文件
直接将parser.mly(主文件)和tokens.mly(依赖令牌文件)一起传给Menhir:
menhir --interpret parser.mly tokens.mly
注意事项
tokens.mly应只包含令牌声明(%token、优先级/结合性声明如%left),不要添加语法规则或%start声明。parser.mly保留原有的%start <item> item起始符号声明和完整语法规则即可,无需重复定义令牌。
内容的提问来源于stack exchange,提问作者ttzytt
相关产品推荐
相关产品推荐

