我正在c program.And上做静态分析,我搜索antlr网站,似乎没有合适的语法文件为c program.Does生成ast,这意味着我必须自己完成它,因为start.Or有一个更快的方法,我还需要一个能够遍历解析器创建的文件的树解析器。
发布于 2011-11-11 01:21:51
您表示要进行静态分析以检测缓冲区溢出。
首先,为C编写语法比看上去要困难。标准中有所有这些东西,然后是真正的编译器真正接受的东西。并且您必须决定如何处理预处理器(它因编译器而异!)。如果语法和预处理不完全正确,就无法解析真正的程序。(如果你想做玩具语言,那很好,但你不需要C语法)。
要进行分析,您将需要比AST多得多的机器。您将需要符号表、控制和数据流分析、可能的局部和全局点-分析、调用图提取和某种类型的范围分析。
人们似乎不明白这一点。
**获得解析器与使用真实语言做任何有用的事情相比有很长的路要走**
我大喊大叫是因为我一遍又一遍地看到这个。
如果你想继续做一个特定的程序分析或转换任务,除非你想在开始工作之前就老了,你最好找到一个已经具备了你所需要的大部分的基础。语法不稳定的语法分析器生成器的基础不是基础。(不要误解我的意思: ANTLR、YACC、JavaCC都是很好的解析器生成器,它们很适合为新语言构建解析器。他们很好地实现生产解析器的真实语言时,作出投资。但是它们产生解析器,而且大多数人不做制作部分。而且他们不会长期提供额外的机器。)
我们的DMS软件重组工具包包含了上述所有的机器,因为它几乎总是需要的,并且实现它是一个令人头痛的问题。(到目前为止,我的团队已经投资了15年。)
我们还实例化了机器在各种方言中对COBOL和Java,C,C++特别有用(在某种程度上,这种语言确实很难),这样其他人就不必重复这个漫长的过程了。
GCC和Clang对于C和C++作为替代品来说是相当成熟的。
发布于 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
祝好运。
https://stackoverflow.com/questions/8061011
复制相似问题