private static SyntaxNode ParseLevel0BinOperation(CobaltParser parser) { SyntaxNode left = ParseLevel1BinOperation(parser); if (parser.PeekToken() != null && parser.PeekToken().Class == TokenClass.BIN_OP && getPrecedence(parser.PeekToken().Value.ToString()) == 0) { string oper = parser.ReadToken().Value.ToString(); BinOp ret = new BinOp(BinaryOperation.BOOL_OR); ret.AddLeave(left); ret.AddLeave(ParseLevel0BinOperation(parser)); return ret; } return left; }
private static SyntaxNode ParseLevel6BinOperation(CobaltParser parser) { SyntaxNode left = ParseValue(parser); if (parser.PeekToken() != null && parser.PeekToken().Class == TokenClass.BIN_OP && getPrecedence(parser.PeekToken().Value.ToString()) == 6) { string oper = parser.ReadToken().Value.ToString(); Console.WriteLine(oper); BinOp ret = new BinOp(oper == "*" ? BinaryOperation.MUL : BinaryOperation.DIV); ret.AddLeave(left); ret.AddLeave(ParseLevel6BinOperation(parser)); return ret; } return left; }
private static SyntaxNode ParseLevel2BinOperation(CobaltParser parser) { SyntaxNode left = ParseLevel3BinOperation(parser); if (parser.PeekToken() != null && parser.PeekToken().Class == TokenClass.BIN_OP && getPrecedence(parser.PeekToken().Value.ToString()) == 2) { string oper = parser.ReadToken().Value.ToString(); BinOp ret = new BinOp(oper == "==" ? BinaryOperation.EQUAL : BinaryOperation.NOT_EQUAL); ret.AddLeave(left); ret.AddLeave(ParseLevel2BinOperation(parser)); return ret; } return left; }