ANTLR4 no análisis typedef
Pregunta
Estoy usando ANTLR4 y canónica de la gramática para C como se encuentra aquí:
https://github.com/antlr/grammars-v4/tree/master/c
Yo no soy la modificación de la gramática de cualquier manera.Me estoy dando cuenta de que el análisis de errores en la typedef
declaraciones que ocurren fuera de las funciones.El ejemplo más simple que puedo dar:
PASA:
main()
{
typedef unsigned int UINT;
return 0;
}
FALLA:
typedef unsigned int UINT;
main()
{
return 0;
}
El mensaje de error es:
línea 1:0 ninguna alternativa viable en la entrada 'typedef'
Yo no soy consciente de que cualquier regla en C que dice typedefs debe aparecer dentro de funciones.Es esto un error en la ANTLR C de la gramática, o estoy haciendo algo mal?
Solución
funciona para mí:
antlr4 C.g4
javac *.java
grun C compilationUnit -tree t.c
(compilationUnit (translationUnit (translationUnit (externalDeclaration (declaration (declarationSpecifiers (declarationSpecifier (storageClassSpecifier typedef)) (declarationSpecifier (typeSpecifier unsigned)) (declarationSpecifier (typeSpecifier int)) (declarationSpecifier (typeSpecifier (typedefName UINT)))) ;))) (externalDeclaration (functionDefinition (declarator (directDeclarator (directDeclarator main) ( ))) (compoundStatement { (blockItemList (blockItem (statement (jumpStatement return (expression (assignmentExpression (conditionalExpression (logicalOrExpression (logicalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (shiftExpression (additiveExpression (multiplicativeExpression (castExpression (unaryExpression (postfixExpression (primaryExpression 0))))))))))))))))) ;)))) })))) <EOF>)
¿Asunto de la versión antlr?¿Classpath diff entre javac y antlr4?