// ** This class was generated with DemFGen (vers:01/05/2008) options{ STATIC = false; } PARSER_BEGIN(TheParser) package gen; import edu.neu.ccs.demeterf.demfgen.lib.*; import edu.neu.ccs.demeterf.*; import edu.neu.ccs.demeterf.control.Fields; import edu.neu.ccs.demeterf.demfgen.lib.ident; import edu.neu.ccs.demeterf.demfgen.lib.verbatim; class TheParser{ static char unescapeChar(String s){ s = s.substring(1,s.length()-1); char c = s.charAt(0); if (c == '\\'){ switch (s.charAt(1)) { case 'n': return '\n'; case 't': return '\t'; case 'b': return '\b'; case 'r': return '\r'; case 'f': return '\f'; case '\\': return '\\'; case '\'': return '\''; case '\"': return '\"'; default: return (char)Integer.parseInt(s.substring(1, s.length()), 8); } } return c; } } PARSER_END(TheParser) byte parse_byte():{ int i; }{ i = parse_int() { return (byte)i; } } Byte parse_Byte():{ byte b; }{ b = parse_byte() { return b; } } short parse_short():{ int i; }{ i = parse_int() { return (short)i; } } Short parse_Short():{ short s; }{ s = parse_short() { return s; } } int parse_int():{ Token t; }{ t = <INT> { return Integer.parseInt(t.image); } } Integer parse_Integer():{ int i; }{ i = parse_int() { return i; } } long parse_long():{ Token t; }{ t = <INT> { return Long.parseLong(t.image); } } Long parse_Long():{ long l; }{ l = parse_long() { return l; } } double parse_double():{ Token t; }{ t = <DOUBLE> { return Double.parseDouble(t.image); } } Double parse_Double():{ double d; }{ d = parse_double() { return d; } } float parse_float():{ Token t; }{ t = <DOUBLE> { return Float.parseFloat(t.image); } } Float parse_Float():{ float f; }{ f = parse_float() { return f; } } String parse_String():{ Token t; }{ t = <STRING> { return t.image.substring(1,t.image.length()-1); } } boolean parse_boolean():{ Token t; }{ t = <TRUE> { return true; } | t = <FALSE> { return false; } } Boolean parse_Boolean():{ boolean b; }{ b = parse_boolean() { return b; } } char parse_char():{ Token t; }{ t = <CHAR> { return unescapeChar(t.image); } } Character parse_Character():{ char c; }{ c = parse_char() { return c; } } ident parse_ident():{ Token t; }{ t = <IDENT> { return new ident(t.image); } } verbatim parse_verbatim():{ Token t; }{ t = <TEXT> { return new verbatim(t.image.substring(2,t.image.length()-2)); } } public Start parse_Start():{ List<SymmetricMegaMove> moves; }{ moves = parse_List$SymmetricMegaMove$() <EOF> { return new Start(moves); } } public SymmetricMegaMove parse_SymmetricMegaMove():{ MegaMove<White,Black> m1; MegaMove<Black,White> m2; }{ m1 = parse_MegaMove$White$Black$() m2 = parse_MegaMove$Black$White$() { return new SymmetricMegaMove(m1,m2); } } public White parse_White():{ }{ "white" { return new White(); } } public Black parse_Black():{ }{ "black" { return new Black(); } } public Derivative parse_Derivative():{ DerivativeName n; }{ n = parse_DerivativeName() { return new Derivative(n); } } public RawMaterial parse_RawMaterial():{ DerivativeName forD; RawMaterialName n; }{ "for" forD = parse_DerivativeName() "raw" "material" n = parse_RawMaterialName() { return new RawMaterial(forD,n); } } public FinishedProduct parse_FinishedProduct():{ RawMaterialName forR; FinishedProductName n; }{ "for" forR = parse_RawMaterialName() "finished" "product" n = parse_FinishedProductName() { return new FinishedProduct(forR,n); } } public DerivativeName parse_DerivativeName():{ ident v; }{ v = parse_ident() { return new DerivativeName(v); } } public RawMaterialName parse_RawMaterialName():{ ident v; }{ v = parse_ident() { return new RawMaterialName(v); } } public FinishedProductName parse_FinishedProductName():{ ident v; }{ v = parse_ident() { return new FinishedProductName(v); } } public Main parse_Main():{ }{ { return new Main(); } } public MegaMove<Black,White> parse_MegaMove$Black$White$():{ Black whoOffers; List<Derivative> offers; White whoBuys; List<Derivative> buys; Black whoDelivers; List<RawMaterial> rawmaterials; White whoFinishes; List<FinishedProduct> finished; }{ whoOffers = parse_Black() offers = parse_List$Derivative$() whoBuys = parse_White() buys = parse_List$Derivative$() whoDelivers = parse_Black() rawmaterials = parse_List$RawMaterial$() whoFinishes = parse_White() finished = parse_List$FinishedProduct$() { return new MegaMove<Black,White>(whoOffers,offers,whoBuys,buys,whoDelivers,rawmaterials,whoFinishes,finished); } } public List<FinishedProduct> parse_List$FinishedProduct$():{ List<FinishedProduct> sup = null; }{ ( sup = parse_Cons$FinishedProduct$() { return sup; } | sup = parse_Empty$FinishedProduct$() { return sup; } ) } public Empty<FinishedProduct> parse_Empty$FinishedProduct$():{ }{ { return new Empty<FinishedProduct>(); } } public Cons<FinishedProduct> parse_Cons$FinishedProduct$():{ FinishedProduct first; List<FinishedProduct> rest; }{ first = parse_FinishedProduct() rest = parse_List$FinishedProduct$() { return new Cons<FinishedProduct>(first,rest); } } public List<RawMaterial> parse_List$RawMaterial$():{ List<RawMaterial> sup = null; }{ ( sup = parse_Cons$RawMaterial$() { return sup; } | sup = parse_Empty$RawMaterial$() { return sup; } ) } public Empty<RawMaterial> parse_Empty$RawMaterial$():{ }{ { return new Empty<RawMaterial>(); } } public Cons<RawMaterial> parse_Cons$RawMaterial$():{ RawMaterial first; List<RawMaterial> rest; }{ first = parse_RawMaterial() rest = parse_List$RawMaterial$() { return new Cons<RawMaterial>(first,rest); } } public List<Derivative> parse_List$Derivative$():{ List<Derivative> sup = null; }{ ( sup = parse_Cons$Derivative$() { return sup; } | sup = parse_Empty$Derivative$() { return sup; } ) } public Empty<Derivative> parse_Empty$Derivative$():{ }{ { return new Empty<Derivative>(); } } public Cons<Derivative> parse_Cons$Derivative$():{ Derivative first; List<Derivative> rest; }{ first = parse_Derivative() rest = parse_List$Derivative$() { return new Cons<Derivative>(first,rest); } } public MegaMove<White,Black> parse_MegaMove$White$Black$():{ White whoOffers; List<Derivative> offers; Black whoBuys; List<Derivative> buys; White whoDelivers; List<RawMaterial> rawmaterials; Black whoFinishes; List<FinishedProduct> finished; }{ whoOffers = parse_White() offers = parse_List$Derivative$() whoBuys = parse_Black() buys = parse_List$Derivative$() whoDelivers = parse_White() rawmaterials = parse_List$RawMaterial$() whoFinishes = parse_Black() finished = parse_List$FinishedProduct$() { return new MegaMove<White,Black>(whoOffers,offers,whoBuys,buys,whoDelivers,rawmaterials,whoFinishes,finished); } } public List<SymmetricMegaMove> parse_List$SymmetricMegaMove$():{ List<SymmetricMegaMove> sup = null; }{ ( sup = parse_Cons$SymmetricMegaMove$() { return sup; } | sup = parse_Empty$SymmetricMegaMove$() { return sup; } ) } public Empty<SymmetricMegaMove> parse_Empty$SymmetricMegaMove$():{ }{ { return new Empty<SymmetricMegaMove>(); } } public Cons<SymmetricMegaMove> parse_Cons$SymmetricMegaMove$():{ SymmetricMegaMove first; List<SymmetricMegaMove> rest; }{ first = parse_SymmetricMegaMove() rest = parse_List$SymmetricMegaMove$() { return new Cons<SymmetricMegaMove>(first,rest); } } SKIP : { " " | "\t" | "\n" | "\r" | "\r\n" } SKIP : { <"//" (~["\n","\r"])* ("\n"|"\r\n")> } SKIP : { <"/*" (~["*"])* "*" (~["/"] (~["*"])* "*")* "/">} TOKEN: { < INT : ("+" | "-")?(["0"-"9"])+ > } TOKEN: { < STRING : "\"" (~["\""])* "\"" > } TOKEN: { < TRUE : "true" > } TOKEN: { < FALSE : "false" > } TOKEN: { < DOUBLE : ("-")?(["0"-"9"])+ "." (["0"-"9"])+ | "." (["0"-"9"])+ > } TOKEN: { < IDENT : ["a"-"z","A"-"Z"] (["a"-"z","A"-"Z","0"-"9","_"])* > } TOKEN: { < TEXT : ( "{{" (~["}"])* ( "}" ~["}"] (~["}"])* )* "}}" ) > } TOKEN: { < CHAR: "\'" ( (~["\'","\\","\n","\r"]) | ("\\" ( ["n","t","b","r","f","\\","\'","\""] | ["0"-"7"] ( ["0"-"7"] )? | ["0"-"3"] ["0"-"7"] ["0"-"7"] ) ) ) "\'" > }