//------------------------------------------------------------ /// <summary> /// AdditiveExpression: /// MultiplicativeExpression (AdditiveOperator MultiplicativeExpression)* /// </summary> /// <returns></returns> IExpression parseAdditiveExpression() { // 第1式 IExpression firstExpr = parseMultiplicativeExpression(); if (firstExpr == null) {// エラー return(null); } for (BinaryOpExpression.OpKind opKind = parseAdditiveOperator(); opKind != BinaryOpExpression.OpKind.Unknnown; opKind = parseAdditiveOperator() ) { nextToken(); // 第2式 IExpression secondExpr = parseMultiplicativeExpression(); if (secondExpr == null) {// エラー return(null); } // 第1式を更新 firstExpr = new BinaryOpExpression(opKind, firstExpr, secondExpr); } return(firstExpr); }
//------------------------------------------------------------ /// <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() ) { nextToken(); // 第2式 IExpression secondExpr = parseEqualityExpression(); if (secondExpr == null) {// エラー return(null); } // 第1式を更新 firstExpr = new BinaryOpExpression(opKind, firstExpr, secondExpr); } return(firstExpr); }
//------------------------------------------------------------ /// <summary> /// EqualityExpression: /// RelationalExpression (EqulityOperator RelationalExpression)* /// </summary> /// <returns></returns> IExpression parseEqualityExpression() { // 第1式 IExpression firstExpr = parseRelationalExpression(); if (firstExpr == null) {// エラー return(null); } for (BinaryOpExpression.OpKind opKind = parseEqualityOperator(); opKind != BinaryOpExpression.OpKind.Unknnown; opKind = parseEqualityOperator() ) { // トークンをメモ Token opToken = currentToken(); // 次のトークンへ nextToken(); // 第2式 IExpression secondExpr = parseRelationalExpression(); if (secondExpr == null) {// エラー return(null); } // 第1式を更新 firstExpr = new BinaryOpExpression(opToken, opKind, firstExpr, secondExpr); } return(firstExpr); }