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?

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top