private void defineDefaultSyntax()
{
KDEFINE_SYNTAX[] syntaxes =
{
new KDEFINE_SYNTAX(){
name = "$ERR",
flag = SynFlag.StmtBreakExec,
},
new KDEFINE_SYNTAX(){
name = "$expr",
rule = "$expr",
ParseStmt = ParseStmt_Expr,
TopStmtTyCheck = TopStmtTyCheck_Expr,
ExprTyCheck = ExprTyCheck_Expr,
kw = KeywordType.Expr,
},
new KDEFINE_SYNTAX(){
name = "$SYMBOL",
ParseStmt = ParseStmt_Symbol,
kw = KeywordType.Symbol,
flag = SynFlag.ExprTerm,
},
new KDEFINE_SYNTAX(){
name = "$USYMBOL",
ParseStmt = ParseStmt_Usymbol,
kw = KeywordType.Usymbol,
flag = SynFlag.ExprTerm,
},
new KDEFINE_SYNTAX(){
name = "$TEXT",
ExprTyCheck = ExprTyCheck_Text,
kw = KeywordType.Text,
flag = SynFlag.ExprTerm,
},
new KDEFINE_SYNTAX(){
name = "$INT",
ExprTyCheck = ExprTyCheck_Int,
kw = KeywordType.TKInt,
flag = SynFlag.ExprTerm,
},
new KDEFINE_SYNTAX(){
name = "$FLOAT",
ExprTyCheck = ExprTyCheck_Float,
kw = KeywordType.TKFloat,
flag = SynFlag.ExprTerm,
},
new KDEFINE_SYNTAX(){
name = "$type",
rule = "$type $expr",
ParseStmt = ParseStmt_Type,
kw = KeywordType.Type,
flag = SynFlag.ExprTerm,
},
new KDEFINE_SYNTAX(){
name = "()",
kw = KeywordType.Parenthesis,
ParseExpr = ParseExpr_Parenthesis,
priority_op2 = 16,
flag = SynFlag.ExprPostfixOp2,
},
new KDEFINE_SYNTAX(){
name = "[]",
kw = KeywordType.Brancet,
priority_op2 = 16,
flag = SynFlag.ExprPostfixOp2,
},
new KDEFINE_SYNTAX(){
name = "{}",
kw = KeywordType.Brace,
priority_op2 = 16,
flag = SynFlag.ExprPostfixOp2,
},
new KDEFINE_SYNTAX(){
name = "$block",
kw = KeywordType.Block,
ParseStmt = ParseStmt_Block,
ExprTyCheck = ExprTyCheck_Block,
},
new KDEFINE_SYNTAX(){
name = "$params",
kw = KeywordType.Params,
ParseStmt = ParseStmt_Params,
TopStmtTyCheck = TopStmtTyCheck_ParamsDecl,
ExprTyCheck = ExprTyCheck_MethodCall,
},
new KDEFINE_SYNTAX(){
name = "$toks",
kw = KeywordType.Toks,
ParseStmt = ParseStmt_Toks,
},
new KDEFINE_SYNTAX(){
name = ".",
priority_op2 = 16,
kw = KeywordType.DOT,
ParseExpr = ParseExpr_Dot,
},
new KDEFINE_SYNTAX(){
name = "/",
op2 = "opDIV",
priority_op2 = 32,
kw = KeywordType.DIV,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "%",
op2 = "opMOD",
priority_op2 = 32,
kw = KeywordType.MOD,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "*",
op2 = "opMUL",
priority_op2 = 32,
kw = KeywordType.MUL,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "+",
op1 = "opPLUS",
op2 = "opADD",
priority_op2 = 64,
kw = KeywordType.ADD,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "-",
op1 = "opMINUS",
op2 = "opSUB",
priority_op2 = 64,
kw = KeywordType.SUB,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "<",
op2 = "opLT",
priority_op2 = 256,
kw = KeywordType.LT,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "<=",
op2 = "opLTE",
priority_op2 = 256,
kw = KeywordType.LTE,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = ">",
op2 = "opGT",
priority_op2 = 256,
kw = KeywordType.GT,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = ">=",
op2 = "opGTE",
priority_op2 = 256,
kw = KeywordType.GTE,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "==",
op2 = "opEQ",
priority_op2 = 512,
kw = KeywordType.EQ,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "!=",
op2 = "opNEQ",
priority_op2 = 512,
kw = KeywordType.NEQ,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "&&",
op2 = "opAND",
priority_op2 = 1024,
kw = KeywordType.AND,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "||",
op2 = "opOR",
priority_op2 = 2048,
kw = KeywordType.OR,
flag = SynFlag.ExprOp,
},
new KDEFINE_SYNTAX(){
name = "=",
priority_op2 = 4096,
flag = SynFlag.ExprLeftJoinOp2,
},
new KDEFINE_SYNTAX(){
name = ",",
op2 = "*",
priority_op2 = 8192,
},
new KDEFINE_SYNTAX(){
name = "$",
},
new KDEFINE_SYNTAX(){
name = "void",
rule = "$type [$USYMBOL \".\"] $SYMBOL $params [$block]",
ParseStmt = ParseStmt_Type,
kw = KeywordType.StmtMethodDecl,
type = KonohaType.Void,
},
new KDEFINE_SYNTAX(){
name = "int",
ParseStmt = ParseStmt_Type,
kw = KeywordType.Type,
type = KonohaType.Int,
},
new KDEFINE_SYNTAX(){
name = "boolean",
ParseStmt = ParseStmt_Type,
kw = KeywordType.Type,
type = KonohaType.Boolean,
},
new KDEFINE_SYNTAX(){
name = "null",
kw = KeywordType.Null,
flag = SynFlag.ExprTerm,
},
new KDEFINE_SYNTAX(){
name = "true",
kw = KeywordType.True,
flag = SynFlag.ExprTerm,
},
new KDEFINE_SYNTAX(){
name = "false",
kw = KeywordType.False,
flag = SynFlag.ExprTerm,
},
new KDEFINE_SYNTAX(){
name = "else",
kw = KeywordType.Else,
rule = "\"else\" $block",
},
new KDEFINE_SYNTAX(){
name = "if",
kw = KeywordType.If,
rule = "\"if\" \"(\" $expr \")\" $block [\"else\" else: $block]",
},
new KDEFINE_SYNTAX(){
name = "return",
kw = KeywordType.Return,
rule = "\"return\" [$expr]",
flag = SynFlag.StmtBreakExec,
},
};
defineSyntax(syntaxes);
}