All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.wensiqun.asmsupport.client.gram.GramSupport.jj Maven / Gradle / Ivy

/**
 * JavaCC template file created by SF JavaCC plugin 1.5.28+ wizard for JavaCC 1.5.0+
 */
options
{
  static = false;
}

PARSER_BEGIN(GramSupport)
package cn.wensiqun.asmsupport.client.gram;

import cn.wensiqun.asmsupport.client.block.ProgramBlock;
import cn.wensiqun.asmsupport.core.block.KernelProgramBlock;
import cn.wensiqun.asmsupport.client.def.Param;
import cn.wensiqun.asmsupport.client.def.param.NumParam;
import cn.wensiqun.asmsupport.client.def.param.BoolParam;
import cn.wensiqun.asmsupport.client.def.param.UncertainParam;
import cn.wensiqun.asmsupport.client.def.var.Var;
import cn.wensiqun.asmsupport.standard.def.clazz.IClass;
import java.util.ArrayList;
import java.util.List;

public class GramSupport
{

  private ProgramBlock block;

  public GramSupport(ProgramBlock block)
  {
    this.block = block;
  }
  
  public static void main(String args []) throws ParseException
  {
  }
}

PARSER_END(GramSupport)


/* WHITE SPACE */

SKIP :
{
  " "
| "\t"
| "\n"
| "\r"
| "\f"
}

/* COMMENTS */

MORE :
{
  "//" : IN_SINGLE_LINE_COMMENT
|
  <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT
|
  "/*" : IN_MULTI_LINE_COMMENT
}


SPECIAL_TOKEN :
{
   : DEFAULT
}


SPECIAL_TOKEN :
{
   : DEFAULT
}


SPECIAL_TOKEN :
{
   : DEFAULT
}


MORE :
{
  < ~[] >
}

/* RESERVED WORDS AND LITERALS */

TOKEN :
{
  < ABSTRACT: "abstract" >
| < BOOLEAN: "boolean" >
| < BREAK: "break" >
| < BYTE: "byte" >
| < CASE: "case" >
| < CATCH: "catch" >
| < CHAR: "char" >
| < CLASS: "class" >
| < CONST: "const" >
| < CONTINUE: "continue" >
| < _DEFAULT: "default" >
| < DO: "do" >
| < DOUBLE: "double" >
| < ELSE: "else" >
| < EXTENDS: "extends" >
| < FALSE: "false" >
| < FINAL: "final" >
| < FINALLY: "finally" >
| < FLOAT: "float" >
| < FOR: "for" >
| < GOTO: "goto" >
| < IF: "if" >
| < IMPLEMENTS: "implements" >
| < IMPORT: "import" >
| < INSTANCEOF: "instanceof" >
| < INT: "int" >
| < INTERFACE: "interface" >
| < LONG: "long" >
| < NATIVE: "native" >
| < NEW: "new" >
| < NULL: "null" >
| < PACKAGE: "package">
| < PRIVATE: "private" >
| < PROTECTED: "protected" >
| < PUBLIC: "public" >
| < RETURN: "return" >
| < SHORT: "short" >
| < STATIC: "static" >
| < SUPER: "super" >
| < SWITCH: "switch" >
| < SYNCHRONIZED: "synchronized" >
| < THIS: "this" >
| < THROW: "throw" >
| < THROWS: "throws" >
| < TRANSIENT: "transient" >
| < TRUE: "true" >
| < TRY: "try" >
| < VOID: "void" >
| < VOLATILE: "volatile" >
| < WHILE: "while" >
}

/* LITERALS */

TOKEN :
{
  < INTEGER_LITERAL:
         (["l","L"])?
      |  (["l","L"])?
      |  (["l","L"])?
  >
|
  < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
|
  < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
|
  < #OCTAL_LITERAL: "0" (["0"-"7"])* >
|
  < FLOATING_POINT_LITERAL:
        (["0"-"9"])+ "." (["0"-"9"])* ()? (["f","F","d","D"])?
      | "." (["0"-"9"])+ ()? (["f","F","d","D"])?
      | (["0"-"9"])+  (["f","F","d","D"])?
      | (["0"-"9"])+ ()? ["f","F","d","D"]
  >
|
  < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
|
  < CHARACTER_LITERAL:
      "'"
      (   (~["'","\\","\n","\r"])
        | ("\\"
            ( ["n","t","b","r","f","\\","'","\""]
            | ["0"-"7"] ( ["0"-"7"] )?
            | ["0"-"3"] ["0"-"7"] ["0"-"7"]
            )
          )
      )
      "'"
  >
|
  < STRING_LITERAL:
      "\""
      (   (~["\"","\\","\n","\r"])
        | ("\\"
            ( ["n","t","b","r","f","\\","'","\""]
            | ["0"-"7"] ( ["0"-"7"] )?
            | ["0"-"3"] ["0"-"7"] ["0"-"7"]
            )
          )
      )*
      "\""
  >
}

/* IDENTIFIERS */

TOKEN :
{
  < IDENTIFIER:  ()* >
|
  < #LETTER:
      [  // all chars for which Character.isIdentifierStart is true
         "$",
         "A"-"Z",
         "_",
         "a"-"z",
         "\u00a2"-"\u00a5",
         "\u00aa",
         "\u00b5",
         "\u00ba",
         "\u00c0"-"\u00d6",
         "\u00d8"-"\u00f6",
         "\u00f8"-"\u021f",
         "\u0222"-"\u0233",
         "\u0250"-"\u02ad",
         "\u02b0"-"\u02b8",
         "\u02bb"-"\u02c1",
         "\u02d0"-"\u02d1",
         "\u02e0"-"\u02e4",
         "\u02ee",
         "\u037a",
         "\u0386",
         "\u0388"-"\u038a",
         "\u038c",
         "\u038e"-"\u03a1",
         "\u03a3"-"\u03ce",
         "\u03d0"-"\u03d7",
         "\u03da"-"\u03f3",
         "\u0400"-"\u0481",
         "\u048c"-"\u04c4",
         "\u04c7"-"\u04c8",
         "\u04cb"-"\u04cc",
         "\u04d0"-"\u04f5",
         "\u04f8"-"\u04f9",
         "\u0531"-"\u0556",
         "\u0559",
         "\u0561"-"\u0587",
         "\u05d0"-"\u05ea",
         "\u05f0"-"\u05f2",
         "\u0621"-"\u063a",
         "\u0640"-"\u064a",
         "\u0671"-"\u06d3",
         "\u06d5",
         "\u06e5"-"\u06e6",
         "\u06fa"-"\u06fc",
         "\u0710",
         "\u0712"-"\u072c",
         "\u0780"-"\u07a5",
         "\u0905"-"\u0939",
         "\u093d",
         "\u0950",
         "\u0958"-"\u0961",
         "\u0985"-"\u098c",
         "\u098f"-"\u0990",
         "\u0993"-"\u09a8",
         "\u09aa"-"\u09b0",
         "\u09b2",
         "\u09b6"-"\u09b9",
         "\u09dc"-"\u09dd",
         "\u09df"-"\u09e1",
         "\u09f0"-"\u09f3",
         "\u0a05"-"\u0a0a",
         "\u0a0f"-"\u0a10",
         "\u0a13"-"\u0a28",
         "\u0a2a"-"\u0a30",
         "\u0a32"-"\u0a33",
         "\u0a35"-"\u0a36",
         "\u0a38"-"\u0a39",
         "\u0a59"-"\u0a5c",
         "\u0a5e",
         "\u0a72"-"\u0a74",
         "\u0a85"-"\u0a8b",
         "\u0a8d",
         "\u0a8f"-"\u0a91",
         "\u0a93"-"\u0aa8",
         "\u0aaa"-"\u0ab0",
         "\u0ab2"-"\u0ab3",
         "\u0ab5"-"\u0ab9",
         "\u0abd",
         "\u0ad0",
         "\u0ae0",
         "\u0b05"-"\u0b0c",
         "\u0b0f"-"\u0b10",
         "\u0b13"-"\u0b28",
         "\u0b2a"-"\u0b30",
         "\u0b32"-"\u0b33",
         "\u0b36"-"\u0b39",
         "\u0b3d",
         "\u0b5c"-"\u0b5d",
         "\u0b5f"-"\u0b61",
         "\u0b85"-"\u0b8a",
         "\u0b8e"-"\u0b90",
         "\u0b92"-"\u0b95",
         "\u0b99"-"\u0b9a",
         "\u0b9c",
         "\u0b9e"-"\u0b9f",
         "\u0ba3"-"\u0ba4",
         "\u0ba8"-"\u0baa",
         "\u0bae"-"\u0bb5",
         "\u0bb7"-"\u0bb9",
         "\u0c05"-"\u0c0c",
         "\u0c0e"-"\u0c10",
         "\u0c12"-"\u0c28",
         "\u0c2a"-"\u0c33",
         "\u0c35"-"\u0c39",
         "\u0c60"-"\u0c61",
         "\u0c85"-"\u0c8c",
         "\u0c8e"-"\u0c90",
         "\u0c92"-"\u0ca8",
         "\u0caa"-"\u0cb3",
         "\u0cb5"-"\u0cb9",
         "\u0cde",
         "\u0ce0"-"\u0ce1",
         "\u0d05"-"\u0d0c",
         "\u0d0e"-"\u0d10",
         "\u0d12"-"\u0d28",
         "\u0d2a"-"\u0d39",
         "\u0d60"-"\u0d61",
         "\u0d85"-"\u0d96",
         "\u0d9a"-"\u0db1",
         "\u0db3"-"\u0dbb",
         "\u0dbd",
         "\u0dc0"-"\u0dc6",
         "\u0e01"-"\u0e30",
         "\u0e32"-"\u0e33",
         "\u0e3f"-"\u0e46",
         "\u0e81"-"\u0e82",
         "\u0e84",
         "\u0e87"-"\u0e88",
         "\u0e8a",
         "\u0e8d",
         "\u0e94"-"\u0e97",
         "\u0e99"-"\u0e9f",
         "\u0ea1"-"\u0ea3",
         "\u0ea5",
         "\u0ea7",
         "\u0eaa"-"\u0eab",
         "\u0ead"-"\u0eb0",
         "\u0eb2"-"\u0eb3",
         "\u0ebd",
         "\u0ec0"-"\u0ec4",
         "\u0ec6",
         "\u0edc"-"\u0edd",
         "\u0f00",
         "\u0f40"-"\u0f47",
         "\u0f49"-"\u0f6a",
         "\u0f88"-"\u0f8b",
         "\u1000"-"\u1021",
         "\u1023"-"\u1027",
         "\u1029"-"\u102a",
         "\u1050"-"\u1055",
         "\u10a0"-"\u10c5",
         "\u10d0"-"\u10f6",
         "\u1100"-"\u1159",
         "\u115f"-"\u11a2",
         "\u11a8"-"\u11f9",
         "\u1200"-"\u1206",
         "\u1208"-"\u1246",
         "\u1248",
         "\u124a"-"\u124d",
         "\u1250"-"\u1256",
         "\u1258",
         "\u125a"-"\u125d",
         "\u1260"-"\u1286",
         "\u1288",
         "\u128a"-"\u128d",
         "\u1290"-"\u12ae",
         "\u12b0",
         "\u12b2"-"\u12b5",
         "\u12b8"-"\u12be",
         "\u12c0",
         "\u12c2"-"\u12c5",
         "\u12c8"-"\u12ce",
         "\u12d0"-"\u12d6",
         "\u12d8"-"\u12ee",
         "\u12f0"-"\u130e",
         "\u1310",
         "\u1312"-"\u1315",
         "\u1318"-"\u131e",
         "\u1320"-"\u1346",
         "\u1348"-"\u135a",
         "\u13a0"-"\u13f4",
         "\u1401"-"\u166c",
         "\u166f"-"\u1676",
         "\u1681"-"\u169a",
         "\u16a0"-"\u16ea",
         "\u1780"-"\u17b3",
         "\u17db",
         "\u1820"-"\u1877",
         "\u1880"-"\u18a8",
         "\u1e00"-"\u1e9b",
         "\u1ea0"-"\u1ef9",
         "\u1f00"-"\u1f15",
         "\u1f18"-"\u1f1d",
         "\u1f20"-"\u1f45",
         "\u1f48"-"\u1f4d",
         "\u1f50"-"\u1f57",
         "\u1f59",
         "\u1f5b",
         "\u1f5d",
         "\u1f5f"-"\u1f7d",
         "\u1f80"-"\u1fb4",
         "\u1fb6"-"\u1fbc",
         "\u1fbe",
         "\u1fc2"-"\u1fc4",
         "\u1fc6"-"\u1fcc",
         "\u1fd0"-"\u1fd3",
         "\u1fd6"-"\u1fdb",
         "\u1fe0"-"\u1fec",
         "\u1ff2"-"\u1ff4",
         "\u1ff6"-"\u1ffc",
         "\u203f"-"\u2040",
         "\u207f",
         "\u20a0"-"\u20af",
         "\u2102",
         "\u2107",
         "\u210a"-"\u2113",
         "\u2115",
         "\u2119"-"\u211d",
         "\u2124",
         "\u2126",
         "\u2128",
         "\u212a"-"\u212d",
         "\u212f"-"\u2131",
         "\u2133"-"\u2139",
         "\u2160"-"\u2183",
         "\u3005"-"\u3007",
         "\u3021"-"\u3029",
         "\u3031"-"\u3035",
         "\u3038"-"\u303a",
         "\u3041"-"\u3094",
         "\u309d"-"\u309e",
         "\u30a1"-"\u30fe",
         "\u3105"-"\u312c",
         "\u3131"-"\u318e",
         "\u31a0"-"\u31b7",
         "\u3400"-"\u4db5",
         "\u4e00"-"\u9fa5",
         "\ua000"-"\ua48c",
         "\uac00"-"\ud7a3",
         "\uf900"-"\ufa2d",
         "\ufb00"-"\ufb06",
         "\ufb13"-"\ufb17",
         "\ufb1d",
         "\ufb1f"-"\ufb28",
         "\ufb2a"-"\ufb36",
         "\ufb38"-"\ufb3c",
         "\ufb3e",
         "\ufb40"-"\ufb41",
         "\ufb43"-"\ufb44",
         "\ufb46"-"\ufbb1",
         "\ufbd3"-"\ufd3d",
         "\ufd50"-"\ufd8f",
         "\ufd92"-"\ufdc7",
         "\ufdf0"-"\ufdfb",
         "\ufe33"-"\ufe34",
         "\ufe4d"-"\ufe4f",
         "\ufe69",
         "\ufe70"-"\ufe72",
         "\ufe74",
         "\ufe76"-"\ufefc",
         "\uff04",
         "\uff21"-"\uff3a",
         "\uff3f",
         "\uff41"-"\uff5a",
         "\uff65"-"\uffbe",
         "\uffc2"-"\uffc7",
         "\uffca"-"\uffcf",
         "\uffd2"-"\uffd7",
         "\uffda"-"\uffdc",
         "\uffe0"-"\uffe1",
         "\uffe5"-"\uffe6"
      ]
  >
|
  < #PART_LETTER:
      [  // all chars for which Character.isIdentifierPart is true
         "\u0000"-"\u0008",
         "\u000e"-"\u001b",
         "$",
         "0"-"9",
         "A"-"Z",
         "_",
         "a"-"z",
         "\u007f"-"\u009f",
         "\u00a2"-"\u00a5",
         "\u00aa",
         "\u00b5",
         "\u00ba",
         "\u00c0"-"\u00d6",
         "\u00d8"-"\u00f6",
         "\u00f8"-"\u021f",
         "\u0222"-"\u0233",
         "\u0250"-"\u02ad",
         "\u02b0"-"\u02b8",
         "\u02bb"-"\u02c1",
         "\u02d0"-"\u02d1",
         "\u02e0"-"\u02e4",
         "\u02ee",
         "\u0300"-"\u034e",
         "\u0360"-"\u0362",
         "\u037a",
         "\u0386",
         "\u0388"-"\u038a",
         "\u038c",
         "\u038e"-"\u03a1",
         "\u03a3"-"\u03ce",
         "\u03d0"-"\u03d7",
         "\u03da"-"\u03f3",
         "\u0400"-"\u0481",
         "\u0483"-"\u0486",
         "\u048c"-"\u04c4",
         "\u04c7"-"\u04c8",
         "\u04cb"-"\u04cc",
         "\u04d0"-"\u04f5",
         "\u04f8"-"\u04f9",
         "\u0531"-"\u0556",
         "\u0559",
         "\u0561"-"\u0587",
         "\u0591"-"\u05a1",
         "\u05a3"-"\u05b9",
         "\u05bb"-"\u05bd",
         "\u05bf",
         "\u05c1"-"\u05c2",
         "\u05c4",
         "\u05d0"-"\u05ea",
         "\u05f0"-"\u05f2",
         "\u0621"-"\u063a",
         "\u0640"-"\u0655",
         "\u0660"-"\u0669",
         "\u0670"-"\u06d3",
         "\u06d5"-"\u06dc",
         "\u06df"-"\u06e8",
         "\u06ea"-"\u06ed",
         "\u06f0"-"\u06fc",
         "\u070f"-"\u072c",
         "\u0730"-"\u074a",
         "\u0780"-"\u07b0",
         "\u0901"-"\u0903",
         "\u0905"-"\u0939",
         "\u093c"-"\u094d",
         "\u0950"-"\u0954",
         "\u0958"-"\u0963",
         "\u0966"-"\u096f",
         "\u0981"-"\u0983",
         "\u0985"-"\u098c",
         "\u098f"-"\u0990",
         "\u0993"-"\u09a8",
         "\u09aa"-"\u09b0",
         "\u09b2",
         "\u09b6"-"\u09b9",
         "\u09bc",
         "\u09be"-"\u09c4",
         "\u09c7"-"\u09c8",
         "\u09cb"-"\u09cd",
         "\u09d7",
         "\u09dc"-"\u09dd",
         "\u09df"-"\u09e3",
         "\u09e6"-"\u09f3",
         "\u0a02",
         "\u0a05"-"\u0a0a",
         "\u0a0f"-"\u0a10",
         "\u0a13"-"\u0a28",
         "\u0a2a"-"\u0a30",
         "\u0a32"-"\u0a33",
         "\u0a35"-"\u0a36",
         "\u0a38"-"\u0a39",
         "\u0a3c",
         "\u0a3e"-"\u0a42",
         "\u0a47"-"\u0a48",
         "\u0a4b"-"\u0a4d",
         "\u0a59"-"\u0a5c",
         "\u0a5e",
         "\u0a66"-"\u0a74",
         "\u0a81"-"\u0a83",
         "\u0a85"-"\u0a8b",
         "\u0a8d",
         "\u0a8f"-"\u0a91",
         "\u0a93"-"\u0aa8",
         "\u0aaa"-"\u0ab0",
         "\u0ab2"-"\u0ab3",
         "\u0ab5"-"\u0ab9",
         "\u0abc"-"\u0ac5",
         "\u0ac7"-"\u0ac9",
         "\u0acb"-"\u0acd",
         "\u0ad0",
         "\u0ae0",
         "\u0ae6"-"\u0aef",
         "\u0b01"-"\u0b03",
         "\u0b05"-"\u0b0c",
         "\u0b0f"-"\u0b10",
         "\u0b13"-"\u0b28",
         "\u0b2a"-"\u0b30",
         "\u0b32"-"\u0b33",
         "\u0b36"-"\u0b39",
         "\u0b3c"-"\u0b43",
         "\u0b47"-"\u0b48",
         "\u0b4b"-"\u0b4d",
         "\u0b56"-"\u0b57",
         "\u0b5c"-"\u0b5d",
         "\u0b5f"-"\u0b61",
         "\u0b66"-"\u0b6f",
         "\u0b82"-"\u0b83",
         "\u0b85"-"\u0b8a",
         "\u0b8e"-"\u0b90",
         "\u0b92"-"\u0b95",
         "\u0b99"-"\u0b9a",
         "\u0b9c",
         "\u0b9e"-"\u0b9f",
         "\u0ba3"-"\u0ba4",
         "\u0ba8"-"\u0baa",
         "\u0bae"-"\u0bb5",
         "\u0bb7"-"\u0bb9",
         "\u0bbe"-"\u0bc2",
         "\u0bc6"-"\u0bc8",
         "\u0bca"-"\u0bcd",
         "\u0bd7",
         "\u0be7"-"\u0bef",
         "\u0c01"-"\u0c03",
         "\u0c05"-"\u0c0c",
         "\u0c0e"-"\u0c10",
         "\u0c12"-"\u0c28",
         "\u0c2a"-"\u0c33",
         "\u0c35"-"\u0c39",
         "\u0c3e"-"\u0c44",
         "\u0c46"-"\u0c48",
         "\u0c4a"-"\u0c4d",
         "\u0c55"-"\u0c56",
         "\u0c60"-"\u0c61",
         "\u0c66"-"\u0c6f",
         "\u0c82"-"\u0c83",
         "\u0c85"-"\u0c8c",
         "\u0c8e"-"\u0c90",
         "\u0c92"-"\u0ca8",
         "\u0caa"-"\u0cb3",
         "\u0cb5"-"\u0cb9",
         "\u0cbe"-"\u0cc4",
         "\u0cc6"-"\u0cc8",
         "\u0cca"-"\u0ccd",
         "\u0cd5"-"\u0cd6",
         "\u0cde",
         "\u0ce0"-"\u0ce1",
         "\u0ce6"-"\u0cef",
         "\u0d02"-"\u0d03",
         "\u0d05"-"\u0d0c",
         "\u0d0e"-"\u0d10",
         "\u0d12"-"\u0d28",
         "\u0d2a"-"\u0d39",
         "\u0d3e"-"\u0d43",
         "\u0d46"-"\u0d48",
         "\u0d4a"-"\u0d4d",
         "\u0d57",
         "\u0d60"-"\u0d61",
         "\u0d66"-"\u0d6f",
         "\u0d82"-"\u0d83",
         "\u0d85"-"\u0d96",
         "\u0d9a"-"\u0db1",
         "\u0db3"-"\u0dbb",
         "\u0dbd",
         "\u0dc0"-"\u0dc6",
         "\u0dca",
         "\u0dcf"-"\u0dd4",
         "\u0dd6",
         "\u0dd8"-"\u0ddf",
         "\u0df2"-"\u0df3",
         "\u0e01"-"\u0e3a",
         "\u0e3f"-"\u0e4e",
         "\u0e50"-"\u0e59",
         "\u0e81"-"\u0e82",
         "\u0e84",
         "\u0e87"-"\u0e88",
         "\u0e8a",
         "\u0e8d",
         "\u0e94"-"\u0e97",
         "\u0e99"-"\u0e9f",
         "\u0ea1"-"\u0ea3",
         "\u0ea5",
         "\u0ea7",
         "\u0eaa"-"\u0eab",
         "\u0ead"-"\u0eb9",
         "\u0ebb"-"\u0ebd",
         "\u0ec0"-"\u0ec4",
         "\u0ec6",
         "\u0ec8"-"\u0ecd",
         "\u0ed0"-"\u0ed9",
         "\u0edc"-"\u0edd",
         "\u0f00",
         "\u0f18"-"\u0f19",
         "\u0f20"-"\u0f29",
         "\u0f35",
         "\u0f37",
         "\u0f39",
         "\u0f3e"-"\u0f47",
         "\u0f49"-"\u0f6a",
         "\u0f71"-"\u0f84",
         "\u0f86"-"\u0f8b",
         "\u0f90"-"\u0f97",
         "\u0f99"-"\u0fbc",
         "\u0fc6",
         "\u1000"-"\u1021",
         "\u1023"-"\u1027",
         "\u1029"-"\u102a",
         "\u102c"-"\u1032",
         "\u1036"-"\u1039",
         "\u1040"-"\u1049",
         "\u1050"-"\u1059",
         "\u10a0"-"\u10c5",
         "\u10d0"-"\u10f6",
         "\u1100"-"\u1159",
         "\u115f"-"\u11a2",
         "\u11a8"-"\u11f9",
         "\u1200"-"\u1206",
         "\u1208"-"\u1246",
         "\u1248",
         "\u124a"-"\u124d",
         "\u1250"-"\u1256",
         "\u1258",
         "\u125a"-"\u125d",
         "\u1260"-"\u1286",
         "\u1288",
         "\u128a"-"\u128d",
         "\u1290"-"\u12ae",
         "\u12b0",
         "\u12b2"-"\u12b5",
         "\u12b8"-"\u12be",
         "\u12c0",
         "\u12c2"-"\u12c5",
         "\u12c8"-"\u12ce",
         "\u12d0"-"\u12d6",
         "\u12d8"-"\u12ee",
         "\u12f0"-"\u130e",
         "\u1310",
         "\u1312"-"\u1315",
         "\u1318"-"\u131e",
         "\u1320"-"\u1346",
         "\u1348"-"\u135a",
         "\u1369"-"\u1371",
         "\u13a0"-"\u13f4",
         "\u1401"-"\u166c",
         "\u166f"-"\u1676",
         "\u1681"-"\u169a",
         "\u16a0"-"\u16ea",
         "\u1780"-"\u17d3",
         "\u17db",
         "\u17e0"-"\u17e9",
         "\u180b"-"\u180e",
         "\u1810"-"\u1819",
         "\u1820"-"\u1877",
         "\u1880"-"\u18a9",
         "\u1e00"-"\u1e9b",
         "\u1ea0"-"\u1ef9",
         "\u1f00"-"\u1f15",
         "\u1f18"-"\u1f1d",
         "\u1f20"-"\u1f45",
         "\u1f48"-"\u1f4d",
         "\u1f50"-"\u1f57",
         "\u1f59",
         "\u1f5b",
         "\u1f5d",
         "\u1f5f"-"\u1f7d",
         "\u1f80"-"\u1fb4",
         "\u1fb6"-"\u1fbc",
         "\u1fbe",
         "\u1fc2"-"\u1fc4",
         "\u1fc6"-"\u1fcc",
         "\u1fd0"-"\u1fd3",
         "\u1fd6"-"\u1fdb",
         "\u1fe0"-"\u1fec",
         "\u1ff2"-"\u1ff4",
         "\u1ff6"-"\u1ffc",
         "\u200c"-"\u200f",
         "\u202a"-"\u202e",
         "\u203f"-"\u2040",
         "\u206a"-"\u206f",
         "\u207f",
         "\u20a0"-"\u20af",
         "\u20d0"-"\u20dc",
         "\u20e1",
         "\u2102",
         "\u2107",
         "\u210a"-"\u2113",
         "\u2115",
         "\u2119"-"\u211d",
         "\u2124",
         "\u2126",
         "\u2128",
         "\u212a"-"\u212d",
         "\u212f"-"\u2131",
         "\u2133"-"\u2139",
         "\u2160"-"\u2183",
         "\u3005"-"\u3007",
         "\u3021"-"\u302f",
         "\u3031"-"\u3035",
         "\u3038"-"\u303a",
         "\u3041"-"\u3094",
         "\u3099"-"\u309a",
         "\u309d"-"\u309e",
         "\u30a1"-"\u30fe",
         "\u3105"-"\u312c",
         "\u3131"-"\u318e",
         "\u31a0"-"\u31b7",
         "\u3400"-"\u4db5",
         "\u4e00"-"\u9fa5",
         "\ua000"-"\ua48c",
         "\uac00"-"\ud7a3",
         "\uf900"-"\ufa2d",
         "\ufb00"-"\ufb06",
         "\ufb13"-"\ufb17",
         "\ufb1d"-"\ufb28",
         "\ufb2a"-"\ufb36",
         "\ufb38"-"\ufb3c",
         "\ufb3e",
         "\ufb40"-"\ufb41",
         "\ufb43"-"\ufb44",
         "\ufb46"-"\ufbb1",
         "\ufbd3"-"\ufd3d",
         "\ufd50"-"\ufd8f",
         "\ufd92"-"\ufdc7",
         "\ufdf0"-"\ufdfb",
         "\ufe20"-"\ufe23",
         "\ufe33"-"\ufe34",
         "\ufe4d"-"\ufe4f",
         "\ufe69",
         "\ufe70"-"\ufe72",
         "\ufe74",
         "\ufe76"-"\ufefc",
         "\ufeff",
         "\uff04",
         "\uff10"-"\uff19",
         "\uff21"-"\uff3a",
         "\uff3f",
         "\uff41"-"\uff5a",
         "\uff65"-"\uffbe",
         "\uffc2"-"\uffc7",
         "\uffca"-"\uffcf",
         "\uffd2"-"\uffd7",
         "\uffda"-"\uffdc",
         "\uffe0"-"\uffe1",
         "\uffe5"-"\uffe6",
         "\ufff9"-"\ufffb"
      ]
  >
}

/* SEPARATORS */

TOKEN :
{
  < LPAREN: "(" >
| < RPAREN: ")" >
| < LBRACE: "{" >
| < RBRACE: "}" >
| < LBRACKET: "[" >
| < RBRACKET: "]" >
| < SEMICOLON: ";" >
| < COMMA: "," >
| < DOT: "." >
}

/* OPERATORS */

TOKEN :
{
  < ASSIGN: "=" >
| < GT: ">" >
| < LT: "<" >
| < BANG: "!" >
| < TILDE: "~" >
| < HOOK: "?" >
| < COLON: ":" >
| < EQ: "==" >
| < LE: "<=" >
| < GE: ">=" >
| < NE: "!=" >
| < SC_OR: "||" >
| < SC_AND: "&&" >
| < INCR: "++" >
| < DECR: "--" >
| < PLUS: "+" >
| < MINUS: "-" >
| < STAR: "*" >
| < SLASH: "/" >
| < BIT_AND: "&" >
| < BIT_OR: "|" >
| < XOR: "^" >
| < REM: "%" >
| < LSHIFT: "<<" >
| < RSIGNEDSHIFT: ">>" >
| < RUNSIGNEDSHIFT: ">>>" >
| < PLUSASSIGN: "+=" >
| < MINUSASSIGN: "-=" >
| < STARASSIGN: "*=" >
| < SLASHASSIGN: "/=" >
| < ANDASSIGN: "&=" >
| < ORASSIGN: "|=" >
| < XORASSIGN: "^=" >
| < REMASSIGN: "%=" >
| < LSHIFTASSIGN: "<<=" >
| < RSIGNEDSHIFTASSIGN: ">>=" >
| < RUNSIGNEDSHIFTASSIGN: ">>>=" >
}

/************************
 * START JAVA STATEMENT *
 ************************/

/*
 * Type, name and expression syntax follows.
 */
IClass Type() :
{
    int dim = 0;
    IClass base;
}
{
  (
    base=PrimitiveType()
  |
    {
    base = block.getType(Name());
    }
  )
  (
    "[" "]"
	  {
	    dim++;
	  }
  )*
  {
    if(dim > 0)
    {
      block.getArrayType(base, dim);
    } else
    {
      return base;
    }
  }
}

IClass PrimitiveType() :
{}
{
  "boolean"
  {
    return block.getType(boolean.class);
  }
|
  "char"
  {
    return block.getType(char.class);
  }
|
  "byte"
  {
    return block.getType(byte.class);
  }
|
  "short"
  {
    return block.getType(short.class);
  }
|
  "int"
  {
    return block.getType(int.class);
  }
|
  "long"
  {
    return block.getType(long.class);
  }
|
  "float"
  {
    return block.getType(float.class);
  }
|
  "double"
  {
    return block.getType(double.class);
  }
}

IClass ResultType() :
{
  IClass type;
}
{
  "void"
  {
    return block.getType(void.class);
  }
|
  type = Type()
  {
    return type;
  } 
}

String Name() :
/*
 * A lookahead of 2 is required below since "Name" can be followed
 * by a ".*" when used in the context of an "ImportDeclaration".
 */
{
  StringBuilder name = new StringBuilder();
  Token token;
}
{
  token = 
  {
    name.append(token.image);
  }
  ( LOOKAHEAD(2) "." token = 
  {
    name.append(".").append(token.image);
  }
  )*
  {
    return name.toString();
  }
}

void BlockStatement() :
{}
{
  LOOKAHEAD([ "final" ] Type() )
  LocalVariableDeclaration() ";"
|
  Statement()
}

DeclaratorMeta VariableDeclarator() :
{
  DeclaratorMeta meta = new DeclaratorMeta();
  IdentifyWrapper id;
  ParamWrapper val;
}
{
  id = VariableDeclaratorId()
  {
    meta.id = id;
  }
  [
  "=" val = VariableInitializer()
  {
    meta.val = val;
  }
  ]
  {
    return meta; 
  }
}

IdentifyWrapper VariableDeclaratorId() :
{
  Token token;
  IdentifyWrapper idenWrap = new IdentifyWrapper();
}
{
  token =  ( "[" "]" { idenWrap.dim++; } )*
  {
    idenWrap.iden = token.image;
    return idenWrap;
  }
}

ParamWrapper VariableInitializer() :
{
  ParamWrapper result = new ParamWrapper();
  Object current;
}
{
  (
  current = ArrayInitializer()
  {
    result.setArray(current);
  }
  |
  current = Expression()
  {
    result.setSingle((Param)current);
  }
  )
  {
    return result;
  }
}

Object ArrayInitializer() :
{
  List array = new ArrayList();
  ParamWrapper element; 
}
{
  "{"
  [
    element = VariableInitializer()
    {
      array.add(element.get());
    }
    (
      LOOKAHEAD(2) ","
      element = VariableInitializer()
      {
        array.add(element.get());
      }
    )*
  ]
  [ "," ]
  "}"
  {
    return array.toArray(new Object[array.size()]);
  }
}

Param Expression() :
/*
 * This expansion has been written this way instead of:
 *   Assignment() | ConditionalExpression()
 * for performance reasons.
 * However, it is a weakening of the grammar for it allows the LHS of
 * assignments to be any conditional expression whereas it can only be
 * a primary expression.  Consider adding a semantic predicate to work
 * around this.
 */
{
Param var;
String symbol = null;
Param val = null;
}
{
  var = ConditionalExpression()
  [ 
    symbol = AssignmentOperator() val = Expression()
  ]
  {
    if("=".equals(symbol))
    {
      block.assign((Var)var, val);
    }
    else if ("*=".equals(symbol))
    {
      block.assign((Var)var, block.mul(var, val));
    }
    else if ("/=".equals(symbol))
    {
      block.assign((Var)var, block.div(var, val));
    }
    else if ("%=".equals(symbol))
    {
      block.assign((Var)var, block.mod(var, val));
    }
    else if ("+=".equals(symbol))
    {
      block.assign((Var)var, block.add(var, val));
    }
    else if ("-=".equals(symbol))
    {
      block.assign((Var)var, block.sub(var, val));
    }
    else if ("<<=".equals(symbol))
    {
      block.assign((Var)var, block.shl(var, val));
    }
    else if (">>=".equals(symbol))
    {
      block.assign((Var)var, block.shr(var, val));
    }
    else if (">>>=".equals(symbol))
    {
      block.assign((Var)var, block.ushr(var, val));
    }
    else if ("&=".equals(symbol))
    {
      block.assign((Var)var, block.band(var, val));
    }
    else if ("^=".equals(symbol))
    {
      block.assign((Var)var, block.bxor(var, val));
    }
    else if ("|=".equals(symbol))
    {
      block.assign((Var)var, block.bor(var, val));
    }
    return var;
  }
}

String AssignmentOperator() :
{
  Token token;
}
{
(
  token = "="
| token = "*="
| token = "/="
| token = "%="
| token = "+="
| token = "-="
| token = "<<="
| token = ">>="
| token = ">>>="
| token = "&="
| token = "^="
| token = "|="
)
{
  return token.image;
}
}

Param ConditionalExpression() :
{
  Param left;
  Param trueResult;
  Param falseResult;
}
{
  left = ConditionalOrExpression()
  [ "?" trueResult = Expression() ":" falseResult = ConditionalExpression()
  {
    left = block.ternary(left, trueResult, falseResult);
  }
  ]
  {
    return left;
  }
}

Param ConditionalOrExpression() :
{
  Param left;
  Param right;
}
{
  left = ConditionalAndExpression()
  ( "||" right = ConditionalAndExpression()
  {
    left = block.or(left, right);
  }
  )*
  {
    return left;
  }
}

Param ConditionalAndExpression() :
{
  Param left;
  Param right;
}
{
  left = InclusiveOrExpression()
  ( "&&" right = InclusiveOrExpression()
  {
    left = block.and(left, right);
  }
  )*
  {
    return left;
  }
}

Param InclusiveOrExpression() :
{
  Param left;
  Param right;
}
{
  left = ExclusiveOrExpression()
  ( "|" right = ExclusiveOrExpression()
  {
    left = block.bor(left, right);
  }
  )*
  {
    return left;
  }
}

Param ExclusiveOrExpression() :
{
  Param left;
  Param right;
}
{
  left = AndExpression()
  ( "^" right = AndExpression()
  {
    left = block.bxor(left, right);
  }
  )*
  {
    return left;
  }
}

Param AndExpression() :
{
  Param left;
  Param right;
}
{
  left = EqualityExpression()
  ( "&" right = EqualityExpression()
  {
    left = block.band(left, right);
  }
  )*
  {
    return left;
  }
}

Param EqualityExpression() :
{
  Param left;
  Param right;
  Token symbol;
}
{
  left = InstanceOfExpression()
  ( ( symbol = "==" | symbol= "!=" ) right = InstanceOfExpression()
  {
    if("==".equals(symbol.image))
    {
      left = block.eq(left, right);
    }
    else
    {
      left = block.ne(left, right);
    }
  }
  )*
  {
    return left;
  }
}

Param InstanceOfExpression() :
{
  Param left;
  IClass type;
}
{
  left = RelationalExpression()
  [ "instanceof" type = Type()
  {
    return block.instanceof_(left, type);
  }
  ]
  {
    return left;
  }
}

Param RelationalExpression() :
{
  Param left;
  Param right;
  Token symbol;
}
{
  left = ShiftExpression()
  ( ( symbol = "<" | symbol = ">" | symbol = "<=" | symbol = ">=" ) right = ShiftExpression()
  {
    if("<".equals(symbol.image))
    {
      left = block.lt(left, right);
    }
    else if (">".equals(symbol.image))
    {
      left = block.gt(left, right);
    }
    else if ("<=".equals(symbol.image))
    {
      left = block.le(left, right);
    }
    else
    {
      left = block.ge(left, right);
    }
  }
  )*
  {
    return left;
  }
}

Param ShiftExpression() :
{
  Param left;
  Param right;
  Token symbol;
}
{
  left =  AdditiveExpression()
  ( ( symbol = "<<" | symbol = ">>" | symbol =  ">>>" ) right = AdditiveExpression()
  {
    if("<<".equals(symbol.image))
    {
      left = block.shl(left, right);
    }
    else if (">>".equals(symbol.image))
    {
      left = block.shr(left, right);
    }
    else
    {
      left = block.ushr(left, right);
    }
  }
  )*
  {
    return left;
  }
}

Param AdditiveExpression() :
{
  Param left;
  Param right;
  Token symbol;
}
{
  left = MultiplicativeExpression()
  ( ( symbol = "+" | symbol = "-" ) right = MultiplicativeExpression()
  {
    if("+".equals(symbol.image))
    {
      left = block.add(left, right);
    }
    else
    {
      left = block.sub(left, right);
    }
  }
  )*
  {
    return left;
  }
}

Param MultiplicativeExpression() :
{
  Param left;
  Param right;
  Token symbol;
}
{
  left =  UnaryExpression()
  ( ( symbol = "*" | symbol = "/" | symbol = "%" ) right = UnaryExpression()
  {
    if("*".equals(symbol.image))
    {
      left = block.mul(left, right);
    }
    else if("/".equals(symbol.image))
    {
      left = block.div(left, right);
    }
    else
    {
      left = block.mod(left, right);
    }
  }
  )*
  {
    return left;
  }
}

Param UnaryExpression() :
{
  Token token;
  Param value;
}
{
  ( token = "+" | token = "-" ) value = UnaryExpression()
  {
    if("-".equals(token.image)) {
      return block.neg(value);
    } else {
      return value;
    }
  }
|
  value = PreIncrementExpression()
  {
    return value;
  }
|
  value = PreDecrementExpression()
  {
    return value;
  }
|
  value = UnaryExpressionNotPlusMinus()
  {
    return value;
  }
}

NumParam PreIncrementExpression() :
{}
{
  "++" 
  {
    return block.preinc(PrimaryExpression());
  }
}

NumParam PreDecrementExpression() :
{}
{
  "--"
  {
    return block.predec(PrimaryExpression());
  }
}

Param UnaryExpressionNotPlusMinus() :
{
  Token token;
  Param value;
}
{
  ( token = "~" | token = "!" ) value = UnaryExpression()
  {
    if("~".equals(token.image)) {
      return block.reverse(value);
    } else if ("!".equals(token.image)) {
      return block.no(value);
    }
  }
|
  LOOKAHEAD( CastLookahead() )
  value = CastExpression()
  {
    return value;
  }
|
  value = PostfixExpression()
  {
    return value;
  }
}

// This production is to determine lookahead only.  The LOOKAHEAD specifications
// below are not used, but they are there just to indicate that we know about
// this.
void CastLookahead() :
{}
{
  LOOKAHEAD(2)
  "(" PrimitiveType()
|
  LOOKAHEAD("(" Name() "[")
  "(" Name() "[" "]"
|
  "(" Name() ")" ( "~" | "!" | "(" |  | "this" | "super" | "new" | Literal() )
}

NumParam PostfixExpression() :
{
  Token token = null;
  Param value;
}
{
  value = PrimaryExpression() [ token = "++" | token = "--" ]
  {
    if("++".equals(token.image))
    {
      return block.postinc(value);
    } else if ("--".equals(token.image))
    {
      return block.postdec(value);
    }
  }
}

UncertainParam CastExpression() :
{
    IClass type;
    Param value;
}
{
  LOOKAHEAD("(" PrimitiveType())
  "(" type = Type() ")" value = UnaryExpression()
  {
    return block.checkcast(value, type);
  }
|
  "(" type = Type() ")" value = UnaryExpressionNotPlusMinus()
  {
    return block.checkcast(value, type);
  }
}

Param PrimaryExpression() :
{
   PrimaryData data;
}
{
  data = PrimaryPrefix()
  ( LOOKAHEAD(2) data = PrimarySuffix(data))*
  {
    return owner.getOwner();
  }
}

PrimaryData PrimaryPrefix() :
{
  PrimaryData data = new PrimaryData();
  Param param;
  String name;
  IClass type;
  Token token;
}
{
  param = Literal()
  {
    data.setOwner(param);
    return data;
  }
|
  "this"
  {
    data.setOwner(block.this_());
    return data;
  }
|
  "super" "." token = 
  {
    data.setSuperFieldOrMethod(token.image);
    return data;
  }
|
  "(" param = Expression() ")"
  {
    data.setOwner(param);
    return data;
  }
|
  param = AllocationExpression()
  {
    data.setOwner(param);
    return data;
  }
|
  LOOKAHEAD( ResultType() "." "class" )
  type = ResultType() "." "class"
  {
    data.setOwner(param);
    return data;
  }
|
  name = Name()
  {
    data.setFieldOrMethod(token.image);
    return data;
  }
}

PrimaryData PrimarySuffix(PrimaryData owner) :
{
Param param;
Token token;
Param[] params;
PrimaryData retVal = new PrimaryData();
}
{
  LOOKAHEAD(2)
  "." param = AllocationExpression()
  {
    return null;
  }
|
  "[" param = Expression() "]"
  {
    
  }
|
  "." token = 
  {
    retVal.setIdentifier(token.image);
  }
|
  params = Arguments()
  {
    return block.call(owner, );
  }
}

Param Literal() :
{
  Param val;
  Token token;
  String valueStr;
}
{
  token = 
  {
    valueStr = token.image;
    boolean isLong = valueStr.endsWith("L") || valueStr.endsWith("l");
    if(isLong)
    {
      valueStr = valueStr.substring(0, valueStr.length() - 1);
    }
    if(valueStr.startsWith("0x") || valueStr.startsWith("0X"))
    {
      valueStr = valueStr.substring(2);
      return isLong ? block.val(Long.valueOf(valueStr, 16)) :
                      block.val(Integer.valueOf(valueStr, 16));
    }
    else if (valueStr.startsWith("0"))
    {
      valueStr = valueStr.substring(1);
      return isLong ? block.val(Long.valueOf(valueStr, 8)) :
                      block.val(Integer.valueOf(valueStr, 8));
    }
    else 
    {
      return isLong ? block.val(Long.valueOf(valueStr)) :
                      block.val(Integer.valueOf(valueStr));
    }
  }
|
  token = 
  {
    valueStr = token.image;
    return block.val(Double.parseDouble(valueStr));
  }
|
  token = 
  {
    return block.val(token.image.charAt(1));
  }
|
  token = 
  {
    return block.val(token.image.substring(1, token.image.length() - 1));
  }
|
  val = BooleanLiteral()
  {
    return val;
  }
|
  val = NullLiteral()
  {
    return val;
  }
}

Param BooleanLiteral() :
{}
{
  "true"
  {
    return block.val(true);
  }
|
  "false"
  {
    return block.val(false);
  }
}

Param NullLiteral() :
{}
{
  "null"
  {
    return new NullFlag();
  }
}

Param[] Arguments() :
{
    Param[] args = null;
}
{
  ("("
   [ args = ArgumentList() ]
   ")"
  )
  {
    if(args == null)
    {
      return new Param[0];
    }
    return args;
  }
}

Param[] ArgumentList() :
{
    List args = new ArrayList();
    Param cur;
}
{
(    
  cur = Expression()
  {
    args.add(cur);
  }
  (
    "," cur = Expression()
    {
      args.add(cur);
    }
  )*
)
{
  return args.toArray(new Param[args.size()]);
}
}

Param AllocationExpression() :
{
IClass type;
String typeStr;
ParamWrapper paramWrapper = null;
Param[] args;
}
{
  LOOKAHEAD(2)
  "new" type = PrimitiveType() paramWrapper = ArrayDimsAndInits()
  {
    return paramWrapper.getArray(block, type);
  }
|
  "new" typeStr = Name()
    (
      paramWrapper = ArrayDimsAndInits()
      {
        return paramWrapper.getArray(block, block.getType(typeStr));
      }
    |
      args = Arguments()
      {
        return block.new_(block.getType(typeStr), args);
      }
    )
}

/*
 * The third LOOKAHEAD specification below is to parse to PrimarySuffix
 * if there is an expression between the "[...]".
 */
ParamWrapper ArrayDimsAndInits() :
{
  Param param;
}
{
  LOOKAHEAD(2)
  (
  {
    List dimensions = new ArrayList();
  }
  ( LOOKAHEAD(2) "[" param = Expression() "]"
    {
      dimensions.add(param);
    }
  )+ ( LOOKAHEAD(2) "[" "]" )*
  {
    ParamWrapper wrapper = new ParamWrapper();
    wrapper.setDimensions(dimensions.toArray(new Param[dimensions.size()]));
    return wrapper;
  }
  )
|
  {
    Object arrayValue;
  }
  ( "[" "]" )+ arrayValue = ArrayInitializer()
  {
    ParamWrapper wrapper = new ParamWrapper();
    wrapper.setArray(arrayValue);
    return wrapper;
  }
}

void LocalVariableDeclaration() :
{
    IClass type;
    List metaes = new ArrayList();
    DeclaratorMeta meta;
    boolean isFinal = false;
}
{
  [ "final" {isFinal = true;}]
  type = Type()
  meta = VariableDeclarator()
  {
    metaes.add(meta);
  }
  ( "," meta = VariableDeclarator()
  {
    metaes.add(meta);
  }
  )*
  {
    for(DeclaratorMeta m : metaes)
    { 
      //Get finally type
      IdentifyWrapper idenWrap = m.id;
      ParamWrapper value = m.val;
      IClass actullyType = idenWrap.determineType(block, type);
      
      if(actullyType.isArray())
      {
        block.var(idenWrap.iden, actullyType, value.getArray(block, actullyType));
      }
      else
      {
        block.var(idenWrap.iden, actullyType, value.get());
      }
    }
  }
}
/*
 * Statement syntax follows.
 */

void Statement() :
{}
{
  EmptyStatement()
|
  StatementExpression() ";"
|
  BreakStatement()
|
  ContinueStatement()
|
  ReturnStatement()
|
  ThrowStatement()
}

void EmptyStatement() :
{}
{
  ";"
}

void StatementExpression() :
/*
 * The last expansion of this production accepts more than the legal
 * Java expansions for StatementExpression.  This expansion does not
 * use PostfixExpression for performance reasons.
 */
{}
{
  PreIncrementExpression()
|
  PreDecrementExpression()
|
  PrimaryExpression()
  [
    "++"
  |
    "--"
  |
    AssignmentOperator() Expression()
  ]
}

void BreakStatement() :
{}
{
  "break" ";"
  {
    block.break_();
  }
}

void ContinueStatement() :
{}
{
  "continue" ";"
  {
    block.continue_();
  }
}

void ReturnStatement() :
{
    Param result = null;
}
{
  "return" [result = Expression()]
  {
      if(result == null)
      {
        block.return_();
      }
      else
      {
        block.return_(result);
      }
  } ";"
}

void ThrowStatement() :
{}
{
  "throw" {block.throw_(Expression());} ";"
}