Я использую грамматику 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
Спасибо