使用Python解析C ++

问题描述 投票:0回答:1

我正在尝试使用python解析cpp。我使用ANTLR为python生成了解析器,现在我想访问树并收集一些信息。

  • 反正是否有将ANTLR树以JSON格式转储为AST?
  • 我试图跟踪我期望像CallExpr之类的函数调用,但是在生成的解析器文件中找不到任何东西。

这是使用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 ...

python antlr antlr4
1个回答
0
投票

postfixexpression规则识别函数调用:

© www.soinside.com 2019 - 2024. All rights reserved.