2009-06-11 8 views
1

J'ai une grammaire ANTLR et je définis une fonction dans mon langage qui permet un paramètre facultatif. Comment puis-je vérifier si le paramètre facultatif est passé ou non dans le bloc de génération de code?ANTLR: Test grammatical pour le paramètre facultatif (utilisant l'opérateur)

Je cherche essentiellement pour la syntaxe de faire quelque chose comme cette déclaration hypothétique grammaire arbre:

myFunc returns [int retval] : 'myFunc' arg1=number arg2=string? 
{ 
    // Check if arg2 exists. 
    if (/* arg2 exists */) { $retval = $arg1.value + 10; } 
    else { $retval = $arg1.value; } 
} 

Toute suggestion ou à la documentation sont des pointeurs grandement appréciés!

+0

pour les intéressés, la meilleure que j'ai trouvé de la documentation antlr3 est ici: http://java.ociweb.com/mark/programming/ANTLR3/ANTLR3.pdf – Han

Répondre

3

Vous devriez pouvoir vérifier si arg2! = Null.

0

La réponse de Scott fonctionne comme un charme!

Transforme le moyen de référence ANTLR variables définies dans une déclaration if est sans le signe dollar ($), tandis que le reste du temps, le $ est nécessaire.

En outre, pour vérifier si une structure plus complexe qu'une simple chaîne de caractères est présent, utilisez

if (arg2.tree != NULL) 
0

Si vous voulez que ce soit plus général, puis au lieu de coder en dur un paramètre optionnel, vous pouvez avoir votre analyse syntaxique de code plusieurs éléments comme ceci:

myFunc returns [int retval] 
: 'myFunc' funcArgs 
{ 
    // Here you can run through the funcArg Tree and do what 
    // ever you'd like here. 
} 

protected 
funcArgs 
: arg (COMMA arg)* 
Questions connexes