bnfc漂亮的打印机java错误

时间:2016-05-30 15:57:34

标签: java pretty-print bnfc

我有这个BNFC文件描述了一个由许多部分组成的配置文件,其中每个部分的名称在[]后跟一个简单声明列表

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;

示例:

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

[SectionA]
var4 = True;

具有未定义数量的部分和声明。

我从shell运行了命令bnfc -m -java <filename>,一切都从漂亮的打印机中恢复正常。什么时候生成编译prettyprinter.java错误的时间。例如:

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

所有错误都属于这种类型。我想知道,我刚刚建立了语法,我的语法失败了还是BNFC失败了?感谢

1 个答案:

答案 0 :(得分:0)

因为BNFC为每个类别和标签创建了java类,如果使用java.lang中的名称,则会产生歧义(例如StringBoolean ...)。

它适用于以下重命名(我还添加了一个显式入口点):

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;