使用LALRPOP编写解析器遇unresolved import lexer错误求助
问题原因及解决方法
核心原因
这个错误是由于LALRPOP生成器与lalrpop-util依赖版本不兼容导致的。LALRPOP在0.20.x版本后对API进行了重构,移除了__lalrpop_util::lexer模块,改用token相关结构。如果项目中lalrpop(构建依赖)和lalrpop-util(运行依赖)版本不一致,生成的代码就会尝试引用已被移除的lexer模块,从而触发该错误。
额外语法问题
你的语法规则里存在一处写法错误:
"(" <t:Term> ")" => t,
这里的"和<是HTML转义字符,在LALRPOP语法中不需要这么写,应直接使用原始符号:
"(" <t:Term> ")" => t,
解决步骤
- 统一依赖版本:打开项目的
Cargo.toml,确保lalrpop(build-dependencies)和lalrpop-util(dependencies)使用完全相同的版本,示例如下:
[dependencies] lalrpop-util = "0.20.0" [build-dependencies] lalrpop = "0.20.0"
- 修正语法规则中的转义字符:将Term规则里的HTML转义符号替换为原始的括号和尖括号。
- 重新生成解析器:执行
cargo clean清理旧生成文件,再运行cargo build重新生成并编译解析器。
内容的提问来源于stack exchange,提问作者Martijn Dirkse
相关产品推荐
相关产品推荐

