// ** This file was generated with DemFGen (vers:12/15/2010)

options{ STATIC = false;  }
PARSER_BEGIN(TheParser)
package gen;

import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.*;
import java.lang.Integer;
import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.*;
import java.lang.Integer;
import edu.neu.ccs.demeterf.lib.*;
import edu.neu.ccs.demeterf.*;
import java.lang.Integer;
import edu.neu.ccs.demeterf.Fields;
import edu.neu.ccs.demeterf.lib.ident;
import edu.neu.ccs.demeterf.lib.verbatim;

  public class TheParser{

   public static String unescape(String str){
      String retval = "";
      int index = 0;
      char ch, ch1;
      int ordinal = 0;
      while (index < str.length()) {
         if(str.charAt(index) != '\\') { retval += str.charAt(index++); continue; }
         ch = str.charAt(++index);
         if(ch == 'b') { retval += '\b'; index++; continue; }
         if(ch == 't') { retval += '\t'; index++; continue; }
         if(ch == 'n') { retval += '\n'; index++; continue; }
         if(ch == 'f') { retval += '\f'; index++; continue; }
         if(ch == 'r') { retval += '\r'; index++; continue; }
         if(ch == '"') { retval += '\"'; index++; continue; }
         if(ch == '\'') { retval += '\''; index++; continue; }
         if(ch == '\\') { retval += '\\'; index++; continue; }
         if(ch >= '0' && ch <= '7'){
            ordinal = ((int)ch) - ((int)'0'); index++;
            ch1 = str.charAt(index);
            if(ch1 >= '0' && ch1 <= '7'){
               ordinal = ordinal*8 + ((int)ch1) - ((int)'0'); index++;
               ch1 = str.charAt(index);
               if(ch <= '3' && ch1 >= '0' && ch1 <= '7'){
                  ordinal = ordinal*8 + ((int)ch1) - ((int)'0'); index++;
               }
            }
            retval += (char)ordinal;
            continue;
         }
         if(ch == 'u'){
            ordinal = 0;
            for(int i = 0; i < 4; i++){
               index++; ch = str.charAt(index);
               ordinal = ordinal*16+hexval(ch);
            }
            index++;
            retval += (char)ordinal;
            continue;
         }
      }
      return retval;
   }
   static int hexval(char c){
      int r = "0123456789ABCDEF".indexOf(Character.toUpperCase(c));
      if(r >= 0)return r;
      throw new RuntimeException(" ** Bad Escaped Character");
   }
  }
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>
    { if(t.image.length() > 1 && Character.toLowerCase(t.image.charAt(1)) == 'x')
          return Integer.parseInt(t.image.substring(2), 16);
      return Integer.parseInt(t.image); }
}
Integer parse_Integer():{ int i; }{
    i = parse_int() { return i; }
}
long parse_long():{ Token t; }{
    t = <INT>
    { if(t.image.length() > 1 && Character.toLowerCase(t.image.charAt(1)) == 'x')
          return Long.parseLong(t.image.substring(2), 16);
    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 unescape(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 unescape(t.image.substring(1,t.image.length()-1)).charAt(0); }
}
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 InstanceSet parse_InstanceSet():{
}{
    "game-specific intensional definition"
    { return new InstanceSet(); }
}

public Claim parse_Claim():{
     InstanceSet is;
     Protocol p;
}{
    "claim"
    is = parse_InstanceSet()
    p = parse_Protocol()
    { return new Claim(is,p); }
}

public Protocol parse_Protocol():{
    Protocol sup = null;
}{
(   sup = parse_AE() { return sup; } | 
    sup = parse_EA() { return sup; } | 
    sup = parse_PositiveSecret() { return sup; } | 
    sup = parse_NegativeSecret() { return sup; } | 
    sup = parse_Renaissance() { return sup; } | 
    sup = parse_SecretRenaissance() { return sup; } )
}

public ProtocolName parse_ProtocolName():{
     String v;
}{
    v = parse_String()
    { return new ProtocolName(v); }
}

public ProtocolLibrary parse_ProtocolLibrary():{
     List<ClassicProtocol> protocols;
}{
    "protocols"
    protocols = parse_List$ClassicProtocol$()
    { return new ProtocolLibrary(protocols); }
}

public PlayerProxy parse_PlayerProxy():{
}{

    { return new PlayerProxy(); }
}

public AE parse_AE():{
     ProtocolName protocolName;
}{
    "AE"
    "protocol"
    protocolName = parse_ProtocolName()
    { return new AE(protocolName); }
}

public EA parse_EA():{
     ProtocolName protocolName;
}{
    "EA"
    "protocol"
    protocolName = parse_ProtocolName()
    { return new EA(protocolName); }
}

public PositiveSecret parse_PositiveSecret():{
     ProtocolName protocolName;
}{
    "positive"
    "secret"
    "protocol"
    protocolName = parse_ProtocolName()
    { return new PositiveSecret(protocolName); }
}

public NegativeSecret parse_NegativeSecret():{
     ProtocolName protocolName;
}{
    "negative"
    "secret"
    "protocol"
    protocolName = parse_ProtocolName()
    { return new NegativeSecret(protocolName); }
}

public Renaissance parse_Renaissance():{
     ProtocolName protocolName;
}{
    "Renaissance"
    "protocol"
    protocolName = parse_ProtocolName()
    { return new Renaissance(protocolName); }
}

public SecretRenaissance parse_SecretRenaissance():{
     ProtocolName protocolName;
}{
    "secret"
    "Renaissance"
    "protocol"
    protocolName = parse_ProtocolName()
    { return new SecretRenaissance(protocolName); }
}

public ClaimInterface parse_ClaimInterface():{
    ClaimInterface sup = null;
}{
(  { return sup; } )
}

public ProtocolInterface parse_ProtocolInterface():{
    ProtocolInterface sup = null;
}{
(  { return sup; } )
}

public Test2 parse_Test2():{
     Instance i;
     Solution s;
     Domain d;
     Claim c;
     ProtocolLibrary p;
}{
    i = parse_Instance()
    s = parse_Solution()
    d = parse_Domain()
    c = parse_Claim()
    p = parse_ProtocolLibrary()
    <EOF>
    { return new Test2(i,s,d,c,p); }
}

public ClassicProtocol parse_ClassicProtocol():{
     ProtocolName protocolName;
     Alice proposer;
     Bob opposer;
     List<Step> steps;
}{
    "protocol"
    protocolName = parse_ProtocolName()
    "proposer"
    proposer = parse_Alice()
    "refuter"
    opposer = parse_Bob()
    "steps"
    steps = parse_List$Step$()
    { return new ClassicProtocol(protocolName,proposer,opposer,steps); }
}

public Step parse_Step():{
    Step sup = null;
}{
(   sup = parse_InstanceStep() { return sup; } | 
    sup = parse_SolutionStep() { return sup; } )
}

public PlayerRole parse_PlayerRole():{
    PlayerRole sup = null;
}{
(   sup = parse_Alice() { return sup; } | 
    sup = parse_Bob() { return sup; } )
}

public Alice parse_Alice():{
}{
    "Alice"
    { return new Alice(); }
}

public Bob parse_Bob():{
}{
    "Bob"
    { return new Bob(); }
}

public InstanceStep parse_InstanceStep():{
     PlayerRole from;
}{
    "instance"
    "from"
    from = parse_PlayerRole()
    { return new InstanceStep(from); }
}

public SolutionStep parse_SolutionStep():{
     int step;
     PlayerRole from;
}{
    "solution"
    "of"
    step = parse_int()
    "from"
    from = parse_PlayerRole()
    { return new SolutionStep(step,from); }
}

public Reply parse_Reply():{
}{
    "reply"
    { return new Reply(); }
}

public Expectation parse_Expectation():{
}{
    "e"
    { return new Expectation(); }
}

public Instance parse_Instance():{
}{
    "game-specific Instance"
    { return new Instance(); }
}

public Solution parse_Solution():{
}{
    "game-specific Solution"
    { return new Solution(); }
}

public Domain parse_Domain():{
}{
    "domain"
    { return new Domain(); }
}

public DomainInterface parse_DomainInterface():{
    DomainInterface sup = null;
}{
(  { return sup; } )
}

public Test1 parse_Test1():{
     Instance i;
     Solution s;
     Domain d;
}{
    i = parse_Instance()
    s = parse_Solution()
    d = parse_Domain()
    <EOF>
    { return new Test1(i,s,d); }
}








public RBColor parse_RBColor():{
    RBColor sup = null;
}{
(   sup = parse_RED() { return sup; } | 
    sup = parse_BLACK() { return sup; } )
}

public RED parse_RED():{
}{
    "red"
    { return new RED(); }
}

public BLACK parse_BLACK():{
}{
    "black"
    { return new BLACK(); }
}










public List<Step> parse_List$Step$():{
    List<Step> sup = null;
}{
(   sup = parse_Cons$Step$() { return sup; } | 
    sup = parse_Empty$Step$() { return sup; } )
}
public Empty<Step> parse_Empty$Step$():{
}{

    { return new Empty<Step>(); }
}
public Cons<Step> parse_Cons$Step$():{
     Step first;
     List<Step> rest;
}{
    first = parse_Step()
    rest = parse_List$Step$()
    { return new Cons<Step>(first,rest); }
}
public List<ClassicProtocol> parse_List$ClassicProtocol$():{
    List<ClassicProtocol> sup = null;
}{
(   sup = parse_Cons$ClassicProtocol$() { return sup; } | 
    sup = parse_Empty$ClassicProtocol$() { return sup; } )
}
public Empty<ClassicProtocol> parse_Empty$ClassicProtocol$():{
}{

    { return new Empty<ClassicProtocol>(); }
}
public Cons<ClassicProtocol> parse_Cons$ClassicProtocol$():{
     ClassicProtocol first;
     List<ClassicProtocol> rest;
}{
    first = parse_ClassicProtocol()
    rest = parse_List$ClassicProtocol$()
    { return new Cons<ClassicProtocol>(first,rest); }
}
TOKEN: { < INT : ("+" | "-")? ( (["0"-"9"])+ 
                                  | ("0" ["x","X"]) (["0"-"9","a"-"f","A"-"F"])+ ) >
       | < DOUBLE : ("-")?(["0"-"9"])+ "." (["0"-"9"])+ (<EXPON>)?
                            | "." (["0"-"9"])+  (<EXPON>)? >
       | < #EXPON: ["e","E"] (["+","-"])? (["0"-"9"])+ > }
SKIP : { " " | "\t" | "\n" | "\r" | "\r\n" }
SKIP : { < "//" (~["\n","\r"])* ("\n"|"\r\n") >
       | < "/*" (~["*"])* "*" (~["/"] (~["*"])* "*")* "/" > }
TOKEN: { < TRUE : "true" >
       | < FALSE : "false" > }
TOKEN: { < CHAR: "\'" 
              ( (~["\'","\\","\n","\r"]) | 
                ("\\" ( ["n","t","b","r","f","\\","\'","\""] |
                            ["0"-"7"] ( ["0"-"7"] )? |
                            ["0"-"3"] ["0"-"7"] ["0"-"7"] ) ) )
              "\'" >
       | < STRING :
              "\""
              (   (~["\"","\\","\n","\r"])
                | ("\\"
                    ( ["n","t","b","r","f","\\","'","\""]
                    | ["0"-"7"] ( ["0"-"7"] )?
                    | ["0"-"3"] ["0"-"7"] ["0"-"7"]
                    )
                  )
              )*
              "\"" >
       | < TEXT : ( "{{" (~["}"])* ( "}" ~["}"] (~["}"])* )* "}}" ) >
       | < IDENT : ["a"-"z","A"-"Z","$","_"]
                   (["a"-"z","A"-"Z","0"-"9","_","$"])* > }