任意编程语言或IR的AST

时间:2010-10-06 01:31:58

标签: c++ c yacc lex abstract-syntax-tree

是否可以单独使用C或C ++为任意编程语言或IR创建AST(没有YACC和LEX等工具的帮助)?

如果是这样,如何实现词汇和句法分析?

如果没有,那么为了成功创建AST,必须增加到C或C ++的工具是什么?

希望我明白我的怀疑。如果我的问题看起来模糊或缺乏背景,请说明必要的。

P.S:我实际上是在尝试为LLVM的.ll格式的IR表示创建AST。我知道.ll来自AST。但我正在尝试静态分析实践。所以我正在考虑创建AST。

2 个答案:

答案 0 :(得分:2)

在没有解析器生成器的情况下创建解析器的最直接的方法是recursive descent。它有很好的文档记录 - 该领域的标准书籍是The Dragon Book

扫描程序将文本作为输入并生成一串标记作为输出,可以使用标准字符串操作技术编写。

答案 1 :(得分:0)

我怀疑你的任意语言和LLVM的AST之间存在一对一的映射。 这意味着您可能希望分两个阶段完成此任务:

  • 使用您可以获得的最佳解析工具解析您的“任意语言”,以简化解析语言的问题。使用它为您的语言构建AST,遵循生成AST的解析器生成器的标准方法。 LEX / YACC还可以,但那里有很多好的选择。很可能你需要建立一个符号表。

  • 走你解析后的语言的AST来构建你的LLVM AST。这不是一对一的,但是在AST中的树节点附近查看树以收集信息需要生成LLVM代码的能力可能会非常有用。

这是简单编译器的经典样式。

我建议你阅读关于语法指导翻译的Aho / Ullman Dragon书。一天的教育将为您节省数月的工程浪费时间。