2016-05-30 5 views
0

J'ai ce fichier BNFC décrivant un fichier de configuration en plusieurs sections où chaque section a un nom entre [] suivi d'une liste de simple déclarationbnfc assez erreur java imprimante

comment "#"; 
rulse Boolean ::= "True" | "False"; 
Conf. Config ::= [Section]; //a config is a list of sections 
terminator Section ""; 

Sec. Section ::= "[" NomeSec "]" [Decl]; //A section is made of a name and a list of declarations 
terminator Decl ";"; 

NomeSez. NomeSec ::= Ident; 

Dec. Decl ::= VarN "=" Type; 

VarName. VarN ::= Ident; 

Int. Type::=Integer; 
Char. Type::=Char; 
String. Type::=String; 
Float. Type::=Double; 
Bool. Type::=Boolean; 

Exemple:

[Section1] 
Var1 = 3; 
Var2 = "test"; 
#ignored comment 

[SectionA] 
var4 = True; 

avec un nombre indéfini de sections et de déclarations.

J'ai exécuté la commande bnfc -m -java <filename> de la coquille et tout va bien une partie de la jolie imprimante. Quand son temps pour compiler les tas d'erreurs prettyprinter.java sont générés. Par exemple:

ES5/PrettyPrinter.java:10: error: reference to String is ambiguos 
private static final String _L_PAREN = new String("("); both class 
ES5.Absyn.String and class java.lang.String in java.lang match 

Toutes les erreurs sont de ce type. Je me demande, je viens de construire la grammaire, j'ai échoué à la grammaire ou le BNFC a échoué? Merci

Répondre

0

Parce que BNFC crée des classes java pour chaque catégorie et l'étiquette, si les noms d'utilisation qui sont java.lang il crée des ambiguïtés (par exemple String, Boolean ...).

Il fonctionne avec les renommages (I a également ajouté un point d'entrée explicite):

entrypoints Config; 

comment "#"; 
rules MyBoolean ::= "True" | "False"; 
Conf. Config ::= [Section]; -- a config is a list of sections 
terminator Section ""; 

Sec. Section ::= "[" NomeSec "]" [Decl]; -- A section is made of a name and a list of declarations 
terminator Decl ";"; 

NomeSez. NomeSec ::= Ident; 

Dec. Decl ::= VarN "=" Type; 

VarName. VarN ::= Ident; 

TInt. Type::=Integer; 
TChar. Type::=Char; 
TString. Type::=String; 
TFloat. Type::=Double; 
TBool. Type::=MyBoolean; 
+0

Merci pour compagnon d'aide! – davideb93