Имя переменной ANTLR и информация о типе - PullRequest
0 голосов
/ 27 апреля 2020

Я использую грамматику CPP14, предоставленную ANTLR, и вот так выглядит мое модифицированное выражение присваивания:

assignmentexpression
   : conditionalexpression                                     #otherassignments
   | logicalorexpression assignmentoperator initializerclause  #theassignments
   | throwexpression                                           #otherassignments
   ;

Представьте простой код, приведенный ниже,

FILE *test = open_file("./a.txt");

Я посещаю Назначения и get FILE*test=open_file, если я дам дамп дерева разбора в JSON, я получу следующее:

    "theassignments": [
    {
    "logicalorexpression": [
    {
        "logicalandexpression": [
        {
        "inclusiveorexpression": [
        {
            "exclusiveorexpression": [
            {
            "andexpression": [
            {
                "equalityexpression": [
                {
                "relationalexpression": [
                {
                    "shiftexpression": [
                    {
                    "additiveexpression": [
                    {
                        "multiplicativeexpression": [
                        {
                        "multiplicativeexpression": [
                        {
                            "pmexpression": [
                            {
                            "castexpression": [
                            {
                                "unaryexpression": [
                                {
                                "otherPostfixexpression": [
                                {
                                    "primaryexpression": [
                                    {
                                    "idexpression": [
                                    {
                                        "unqualifiedid": [
                                        {
                                        "type": 133,
                                        "text": "FILE"
                                        }
                                        ]
                                    }
                                    ]
                                    }
                                    ]
                                }
                                ]
                                }
                                ]
                            }
                            ]
                            }
                            ]
                        }
                        ]
                        },
                        {
                        "type": 92,
                        "text": "*"
                        },
                        {
                        "pmexpression": [
                        {
                            "castexpression": [
                            {
                            "unaryexpression": [
                            {
                                "otherPostfixexpression": [
                                {
                                "primaryexpression": [
                                {
                                    "idexpression": [
                                    {
                                    "unqualifiedid": [
                                    {
                                        "type": 133,
                                        "text": "test"
                                    }

Глядя на это дерево, я ожидаю, что additiveexpression должно иметь multiplicativeexpression и pmexpression ! Я могу видеть multiplicativeexpression, но не могу найти pmexpression, я не понимаю древовидную структуру, Как я могу получить доступ к pmexpression?

Результат, который я ищу, есть, есть ли лучший способ получить следующий результат?

Type: FILE
Sign : * 
Name : test

Спасибо

...