//------------------------------------------------------------ /// <summary> /// IdentityExpression: /// EqualityExpression (IdentityOperator EqualityExpression )* /// </summary> /// <returns></returns> IExpression parseIdentityExpression() { // 第1式 IExpression firstExpr = parseEqualityExpression(); if (firstExpr == null) {// エラー return(null); } for (BinaryOpExpression.OpKind opKind = parseIdentityOperator(); opKind != BinaryOpExpression.OpKind.Unknnown; opKind = parseEqualityOperator() ) { // トークンをメモ Token opToken = currentToken(); // 次のトークンへ nextToken(); // 第2式 IExpression secondExpr = parseEqualityExpression(); if (secondExpr == null) {// エラー return(null); } // 第1式を更新 firstExpr = new BinaryOpExpression(opToken, opKind, firstExpr, secondExpr); } return(firstExpr); }
//------------------------------------------------------------ /// <summary> /// BitwiseOrExpression: /// BitwiseXorExpression (BitwiseOrOperator BitwiseXorExpression)* /// </summary> /// <returns></returns> IExpression parseBitwiseOrExpression() { // 第1式 IExpression firstExpr = parseBitwiseXorExpression(); if (firstExpr == null) {// エラー return(null); } while (currentToken().Value == Token.Kind.OpOr) { // トークンをメモ Token opToken = currentToken(); // 次のトークンへ nextToken(); // 第2式 IExpression secondExpr = parseBitwiseXorExpression(); if (secondExpr == null) {// エラー return(null); } // 第1式を更新 firstExpr = new BinaryOpExpression(opToken, BinaryOpExpression.OpKind.BitwiseOr, firstExpr, secondExpr); } return(firstExpr); }
//------------------------------------------------------------ // コンストラクタ。 public EvaluateNode(BinaryOpExpression aExpr) { mExpr = aExpr; mFirstNode = mExpr.mFirst.CreateEvaluateNode(); mSecondNode = mExpr.mSecond.CreateEvaluateNode(); }