Exemplo n.º 1
0
        private static ExpressionTuple MakeExpression(ref TokenReader reader)
        {
            System.Diagnostics.Debug.WriteLine("MakeExpression");
            ExpressionTuple ret = new ExpressionTuple();

            if (TryLookAhead(ref reader, Token.TokenType.Exclamation, false) ||
                TryLookAhead(ref reader, Token.TokenType.OpenBracket, false))
            {
                // 新クラスタの開始
                ret.Cluster = MakeCluster(ref reader);
            }
            else
            {
                // フィルタの開始
                ret.Filter = MakeFilter(ref reader);
            }
            AssertNextAny(ref reader, true, Token.TokenType.CloseBracket,
                          Token.TokenType.ConcatenatorAnd, Token.TokenType.ConcatenatorOr);
            return(ret);
        }
Exemplo n.º 2
0
 private static IFilter AnalysisExpression(ExpressionTuple exprTuple)
 {
     if (exprTuple.Cluster != null)
     {
         // Cluster Tuple
         if (exprTuple.Filter != null)
         {
             throw new InvalidOperationException("[内部エラー]AVAILABLE EXPRESSION.CLUSTER AND EXPRESSION.FILTER.");
         }
         return(AnalysisCluster(exprTuple.Cluster));
     }
     else
     {
         // Filter Tuple
         if (exprTuple.Filter == null)
         {
             throw new InvalidOperationException("[内部エラー]UNAVAILABLE EXPRESSION.CLUSTER NOR EXPRESSION.FILTER.");
         }
         return(AnalysisFilterAndAttr(exprTuple.Filter));
     }
 }
Exemplo n.º 3
0
 private static ExpressionTuple MakeExpression(ref TokenReader reader)
 {
     System.Diagnostics.Debug.WriteLine("MakeExpression");
     ExpressionTuple ret = new ExpressionTuple();
     if (TryLookAhead(ref reader, Token.TokenType.Exclamation, false) ||
         TryLookAhead(ref reader, Token.TokenType.OpenBracket, false))
     {
         // 新クラスタの開始
         ret.Cluster = MakeCluster(ref reader);
     }
     else
     {
         // フィルタの開始
         ret.Filter = MakeFilter(ref reader);
     }
     AssertNextAny(ref reader, true, Token.TokenType.CloseBracket,
         Token.TokenType.ConcatenatorAnd, Token.TokenType.ConcatenatorOr);
     return ret;
 }
Exemplo n.º 4
0
 private static IFilter AnalysisExpression(ExpressionTuple exprTuple)
 {
     if (exprTuple.Cluster != null)
     {
         // Cluster Tuple
         if (exprTuple.Filter != null)
             throw new InvalidOperationException("[内部エラー]AVAILABLE EXPRESSION.CLUSTER AND EXPRESSION.FILTER.");
         return AnalysisCluster(exprTuple.Cluster);
     }
     else
     {
         // Filter Tuple
         if (exprTuple.Filter == null)
             throw new InvalidOperationException("[内部エラー]UNAVAILABLE EXPRESSION.CLUSTER NOR EXPRESSION.FILTER.");
         return AnalysisFilterAndAttr(exprTuple.Filter);
     }
 }
Exemplo n.º 5
0
 private static FilterCluster AnalysisExpression(ExpressionTuple expressionTuple)
 {
     var retcluster = new FilterCluster()
     {
         ConcatenateOR = expressionTuple.ConcatOr.GetValueOrDefault(false)
     };
     if (expressionTuple.Expression == null)
     {
         retcluster.Filters = new[] { AnalysisExpressionBody(expressionTuple.ExpressionBody) };
     }
     else
     {
         if (!expressionTuple.ConcatOr.HasValue)
             throw new InvalidOperationException("内部エラー: ExpressionTupleはチェーンを構成しますが、接続情報がありません。");
         retcluster.Filters = new[] { AnalysisExpressionBody(expressionTuple.ExpressionBody), AnalysisExpression(expressionTuple.Expression) };
     }
     return retcluster;
 }
Exemplo n.º 6
0
 private static ExpressionTuple MakeExpression(ref TokenReader reader)
 {
     var extuple = new ExpressionTuple()
     {
         ExpressionBody = MakeExpressionBody(ref reader)
     };
     if (reader.IsRemainToken)
     {
         var ntoken = reader.LookAhead();
         switch (ntoken.Type)
         {
             case Token.TokenType.ConcatenatorAnd:
                 reader.Get();
                 extuple.ConcatOr = false;
                 extuple.Expression = MakeExpression(ref reader);
                 break;
             case Token.TokenType.ConcatenatorOr:
                 reader.Get();
                 extuple.ConcatOr = true;
                 extuple.Expression = MakeExpression(ref reader);
                 break;
             case Token.TokenType.CloseBracket:
                 break;
             default:
                 throw new ArgumentException("トークン " + ntoken.ToString() + " はここに置くことはできません。(@" + ntoken.DebugIndex + ")");
         }
     }
     return extuple;
 }