Hi Experts,
I see an issue in C grammar. We can define pointer to user defined typedef structures. Antlr considering it as multiplicative operation. It works fine for pointer to default data types. Could you suggest me on how to correct this?
Non working case:
(translator) ubuntu@ip-172-31-94-97:~/antlrc$ antlr4-parse C.g4 translationUnit -tree
int main() {
nginx *d;
}
(translationUnit:1 (externalDeclaration:1 (functionDefinition:1 (declarationSpecifiers:1 (declarationSpecifier:2 (typeSpecifier:4 int))) (declarator:2 (directDeclarator:8 (directDeclarator:1 main) ( ))) (compoundStatement:1 { (blockItemList:1 (blockItem:1 (statement:3 (expressionStatement:1 (expression:1 (assignmentExpression:1 (conditionalExpression:1 (logicalOrExpression:1 (logicalAndExpression:1 (inclusiveOrExpression:1 (exclusiveOrExpression:1 (andExpression:1 (equalityExpression:1 (relationalExpression:1 (shiftExpression:1 (additiveExpression:1 (multiplicativeExpression:1 (castExpression:2 (unaryExpression:1 (postfixExpression:1 (primaryExpression:1 nginx)))) * (castExpression:2 (unaryExpression:1 (postfixExpression:1 (primaryExpression:1 d))))))))))))))))) ;)))) }))))
working case:
(translator) ubuntu@ip-172-31-94-97:~/antlrc$ antlr4-parse C.g4 translationUnit -tree
int main() {
int *b;
}
(translationUnit:1 (externalDeclaration:1 (functionDefinition:1 (declarationSpecifiers:1 (declarationSpecifier:2 (typeSpecifier:4 int))) (declarator:2 (directDeclarator:8 (directDeclarator:1 main) ( ))) (compoundStatement:1 { (blockItemList:1 (blockItem:2 (declaration:1 (declarationSpecifiers:1 (declarationSpecifier:2 (typeSpecifier:4 int))) (initDeclaratorList:1 (initDeclarator:1 (declarator:1 (pointer:1 *) (directDeclarator:1 b)))) ;))) }))))
(translator) ubuntu@ip-172-31-94-97:~/antlrc$
Thanks
Bharat