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); }
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)); } }
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; }
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); } }
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; }
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; }