我想知道是否有BNF语法来描述LLVM IR?比如描述C语言的C BNF语法等。
答案 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 code,mailing lists和IRC 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)