首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >antlr为c生成ast并解析ast

antlr为c生成ast并解析ast
EN

Stack Overflow用户
提问于 2011-11-09 06:05:24
回答 2查看 1.5K关注 0票数 2

我正在c program.And上做静态分析,我搜索antlr网站,似乎没有合适的语法文件为c program.Does生成ast,这意味着我必须自己完成它,因为start.Or有一个更快的方法,我还需要一个能够遍历解析器创建的文件的树解析器。

EN

回答 2

Stack Overflow用户

发布于 2011-11-11 01:21:51

您表示要进行静态分析以检测缓冲区溢出。

首先,为C编写语法比看上去要困难。标准中有所有这些东西,然后是真正的编译器真正接受的东西。并且您必须决定如何处理预处理器(它因编译器而异!)。如果语法和预处理不完全正确,就无法解析真正的程序。(如果你想做玩具语言,那很好,但你不需要C语法)。

要进行分析,您将需要比AST多得多的机器。您将需要符号表、控制和数据流分析、可能的局部和全局点-分析、调用图提取和某种类型的范围分析。

人们似乎不明白这一点。

**获得解析器与使用真实语言做任何有用的事情相比有很长的路要走**

我大喊大叫是因为我一遍又一遍地看到这个。

如果你想继续做一个特定的程序分析或转换任务,除非你想在开始工作之前就老了,你最好找到一个已经具备了你所需要的大部分的基础。语法不稳定的语法分析器生成器的基础不是基础。(不要误解我的意思: ANTLR、YACC、JavaCC都是很好的解析器生成器,它们很适合为新语言构建解析器。他们很好地实现生产解析器的真实语言时,作出投资。但是它们产生解析器,而且大多数人不做制作部分。而且他们不会长期提供额外的机器。)

我们的DMS软件重组工具包包含了上述所有的机器,因为它几乎总是需要的,并且实现它是一个令人头痛的问题。(到目前为止,我的团队已经投资了15年。)

我们还实例化了机器在各种方言中对COBOL和Java,C,C++特别有用(在某种程度上,这种语言确实很难),这样其他人就不必重复这个漫长的过程了。

GCC和Clang对于C和C++作为替代品来说是相当成熟的。

票数 4
EN

Stack Overflow用户

发布于 2011-11-09 09:34:42

最难的部分是写语法。混合使用重写规则来创建AST并不那么困难,从发出AST的解析器语法中创建树语法也不是那么困难(与编写解析器语法相比较,也就是)。

下面是前面的问答,它展示了如何创建适当的AST:如何输出使用ANTLR构建的AST?

我找不到一个像样的SO-Q&A来解释如何创建一个树语法,所以这里有一个链接到我的个人博客,解释如下:http://bkiers.blogspot.com/2011/03/6-creating-tree-grammar.html

祝好运。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8061011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档