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

如何在TatSu语法文件中使用#include?相对路径失效问题

解决TatSu中相对路径#include的解析异常问题

问题根源

你用open()读取主语法文件的文本内容再传给tatsu.compile()时,TatSu无法获取主文件的实际路径。失去正确的路径基准后,它解析相对路径的#include时会用错误的路径查找依赖文件,最终出现缺失路径组件的报错。

两种修复方法

  • 直接传入文件路径(推荐)
    无需手动读取文件内容,直接把主语法文件的完整路径传给tatsu.compile(),TatSu会自动基于这个路径解析相对路径的依赖:

    psr = tatsu.compile("/full/path/to/main.ebnf")
    
  • 手动指定主文件路径(适合需预处理内容的场景)
    如果必须先读取文件内容做预处理,就通过filename参数告诉TatSu主文件的完整路径,让它以此为基准查找依赖:

    with open("/full/path/to/main.ebnf") as source:
        psr = tatsu.compile(
            source.read(),
            filename="/full/path/to/main.ebnf"
        )
    

补充说明

TatSu处理#include时,依赖主语法文件的位置计算相对路径。只传文本内容的话,它没有路径参考,会用错误的基准(比如当前工作目录的某个错误子路径)查找文件,自然找不到目标。绝对路径能正常工作,是因为它不需要依赖基准路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:02:07