是否有类似BNF的语法来描述LLVM IR?

时间:2011-01-03 04:06:55

标签: llvm

我想知道是否有BNF语法来描述LLVM IR?比如描述C语言的C BNF语法等。

7 个答案:

答案 0 :(得分:7)

为类似YACC的解析器生成器编写的parser for LLVM assembly language可以作为该语言的BNF定义。

答案 1 :(得分:6)

没有已发布的BNF语法,但有一个部分维护的polygen语法文件,用于完全用于随机生成输入以用于测试LLVM IR解析器和词法分析器的目的。

您可以在此处查看当前版本的语法:

http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/llvm.grm?revision=112427&view=markup

答案 2 :(得分:4)

是。转到文件" LLParser.cpp"在" LLVM / lib / AsmParser&#34 ;; EBNF是扩展吞吐量的文件,例如,350行左右的函数LLParser::ParseNamedType()具有以下函数 - 注释:

/// toplevelentity
///   ::= LocalVar '=' 'type' type
bool LLParser::ParseNamedType() {
  /* impl. */
}

我确定正则表达式会很乐意提取EBNF。我通过解析器手动这样做。

答案 3 :(得分:2)

LLVM IR没有公布的BNF语法。有docs来描述格式,当然还有source codemailing listsIRC channel。这些地方比StackOverflow更好的信息来源。

答案 4 :(得分:2)

回复@tschwinge

  

我刚刚找到LLIR(“用于与LLVM IR交互的非官方库”),其中包括(WIP?)grammar存储库(“LLVM IR汇编的BNF语法”)。

这里的原作者之一。语法存储库确实是一个正在进行的工作,目的是为LLVM IR的汇编语言表示定义BNF语法。可以在https://github.com/llir/llvm/blob/master/current.md

跟踪当前进度

将来,我和我的朋友们希望将这个语法贡献给官方的LLVM项目,并且如果词法分析器和解析器有一天是从BNF语法生成的话,我会很高兴,因为这样可以确保-date语言规范。

我们在编写BNF语法时遇到的一个问题是没有单一的事实来源(当然除了源代码之外)。我们将源代码的BNF注释与LangRef文档进行了比较,有时这些注释与实际的C ++代码不同步,这导致了一些混乱。

BNF语法的当前状态是它支持LLVM IR的所有指令和常量表达式。仍然需要添加一些小的附加功能来支持所有LLVM IR概念,目前我们正在努力支持DWARF元数据。已支持常规元数据节点。

欢快的问候, / u&我

答案 5 :(得分:1)

答案 6 :(得分:0)

我刚刚找到LLIR(“用于与LLVM IR交互的非官方库”),其中包括(WIP?)grammar存储库(“LLVM IR汇编的BNF语法”)。