2010-11-28 8 views
3

J'ai un problème lors de la construction d'AST dans ANTLR (j'utilise ANTLR 3.2, ANTLRWorks 1.4).Règle de réécriture optionnelle pour AST dans ANTLR

C'est ma grammaire:

classDeclaration 
    : 
    (
     'class' n=IDENTIFIER ('extends' e=IDENTIFIER)? 
     '{' 
     … 
     '}' 
    ) 
     -> ^(CLASSDECLARATION ^(NAME $n) ^(EXTENDS $e) 
; 

Le problème se produit avec une partie optionnelle de la classe - ('extends' e=IDENTIFIER)?.

Ainsi la grammaire fonctionne bien avec cette déclaration de classe:

class Test1 extends AbstractTest1 { 
… 
} 

Et échoue quand j'exclus extends partie, comme suit:

class Test2 { 
… 
} 

ANTLR arrête juste avant ce fragment et donne cette exception console: javax.swing.text.BadLocationException: Position not represented by view

Comment puis-je pointer vers ANTLR pour gérer la règle de réécriture ^(EXTENDS $e) en option?

Répondre

2

Le problème a été résolu. Rien de compliqué, il suffit d'utiliser la syntaxe commune RegExp:

^(EXTENDS $e)?