Parsing POSIX sh EBNF语法

Parsing POSIX sh EBNF语法,parsing,posix,grammar,sh,ebnf,Parsing,Posix,Grammar,Sh,Ebnf,是否有现有的POSIX sh语法可用,或者我必须直接从规范中找出它 注意,我对纯sh不太感兴趣;扩展但一致的sh对我来说也很好。我希望sh、csh、ash、bash将包含解析器。GNU版本是开源的;你可以去那里看看。我做了更多的挖掘,找到了以下资源: 一个sh教程位于 一本包含bash2.0的BNF语法的Bash书籍(已发行),附带相关附录 我已经查看了bash、pdksh和posh的源代码,但在我需要的抽象级别上还没有找到任何远程内容。POSIX标准定义了POSIX外壳的源代码。该定义包括带注

是否有现有的POSIX sh语法可用,或者我必须直接从规范中找出它


注意,我对纯sh不太感兴趣;扩展但一致的sh对我来说也很好。

我希望sh、csh、ash、bash将包含解析器。GNU版本是开源的;你可以去那里看看。

我做了更多的挖掘,找到了以下资源:

  • 一个
    sh
    教程位于

  • 一本包含bash2.0的BNF语法的Bash书籍(已发行),附带相关附录


  • 我已经查看了
    bash
    pdksh
    posh
    的源代码,但在我需要的抽象级别上还没有找到任何远程内容。

    POSIX标准定义了POSIX外壳的源代码。该定义包括带注释的Yacc语法。因此,它可以或多或少地机械地转换为EBNF

    如果你想要一个“真正的”语法,那么你必须更努力地寻找。选择你的“真实外壳”,找到源代码,并从中找出语法


    请注意,EBNF并未广泛使用。它的实用价值有限,尤其是因为基本上没有支持它的工具。因此,您不太可能找到现成的EBNF语法(几乎任何语法)。

    在过去的一年中,我多次尝试编写自己的完整Bash解释器,在某个时候,我也达到了标记答案(#2)中所述的同一本书附录参考,但它并不完全正确/更新(例如,它不使用'coproc'保留关键字定义生产规则,并且具有用于重定向的重复生产规则定义,使用's'很容易:派生自()在中,不是纯粹的EBNF,而是Yacc的变体。如果您仔细查看,您可以找到语法规则。是的,它们隐藏在Yacc/Lex定义的其余部分中。欢迎使用工作工具的真正语法定义。@ceving找到了另一个副本并将其保存到Wayback机器中,应该可以延长链接寿命。