You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lark使用parser或postlex解析Shell输出时遇UnexpectedToken错误

解决方案

1. 调整语法规则,显式兼容首行换行

在语法定义的顶层规则开头,添加匹配首行换行的逻辑,让LALR解析器先消耗掉首行的换行符,再处理核心内容:

start: (NEWLINE)* shell_output
shell_output: ...  # 保留你原有的顶层业务规则

2. 校验TreeIndenter的缩进配置

检查TreeIndenter的缩进字符、宽度是否和你的Shell输出格式完全匹配,若缩进配置错位会导致解析时token定位错误:

TreeIndenter(indent_char=' ', dedent_char=' ', indent_width=4)  # 根据实际输出的缩进类型(空格/制表符)、宽度调整

3. 调试LALR的token流定位问题

启用解析器的调试模式,查看token的生成顺序,确认skit_name被识别成了什么token,是否和语法规则中的定义不符:

parser = Lark(grammar, parser='lalr', debug=True)
parser.parse(your_shell_output)

通过调试输出可以快速定位是token识别错误还是规则匹配逻辑的问题,再针对性调整语法。

4. 给顶层规则添加前置空白匹配

如果首行包含空白字符而非单纯换行,在顶层规则前加入空白匹配规则(假设已定义WS匹配空白):

start: WS* shell_output

确保所有前置的空白、换行都被正确消耗,不会干扰后续token的匹配逻辑。


内容的提问来源于stack exchange,提问作者thevoiddancer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:40:27