我正在尝试使用python解析cpp。我使用ANTLR为python生成了解析器,现在我想访问树并收集一些信息。
这是使用https://github.com/antlr/grammars-v4/blob/master/cpp/CPP14.g4的语法文件,im>
我尝试了以下命令来获取CPP解析器,java -jar antlr-4.8-complete.jar -Dlanguage = Python3 ./CPP14.g4 -visitor
这是我拥有的非常基本的代码
import sys import os from antlr4 import * from CPP14Lexer import * from CPP14Parser import * from CPP14Visitor import * class TREEVisitor(CPP14Visitor): def __init__(self): pass def visitExpressionstatement(self, ctx): print(ctx.getText()) return self.visitChildren(ctx) if __name__ == '__main__': dtype = "" input_stream = FileStream(sys.argv[1]) cpplex = CPP14Lexer(input_stream) commtokstream = CommonTokenStream(cpplex) cpparser = CPP14Parser(commtokstream) print("parse errors: {}".format(cpparser._syntaxErrors)) tree = cpparser.translationunit() tv = TREEVisitor() tv.visit(tree)
和正在解析的输入文件,
#include <iostream> using namespace std; int foo(int i, int i2) { return i * i2; } int main(int argc, char *argv[]) { cout << "test" << endl; foo(1, 3); return 0; }
谢谢
我正在尝试使用python解析cpp。我使用ANTLR为python生成了解析器,现在我想访问树并收集一些信息。无论如何,是否有将ANTLR树作为AST转储为JSON ...
postfixexpression
规则识别函数调用: