コード例 #1
0
        public static ConditionalOperator Parse(Scope scope, Token lastToken, OperatorToken opToken, IEnumerable <string> endTokens, DataType expectedDataType)
        {
            var ret = new ConditionalOperator(scope);

            if (lastToken != null)
            {
                ret.AddToken(lastToken);
            }
            ret.AddToken(opToken);

            if (endTokens == null)
            {
                endTokens = _endTokens;
            }
            else
            {
                endTokens = endTokens.Concat(_endTokens).ToArray();
            }

            var leftResultExp = ExpressionToken.TryParse(scope, endTokens, expectedDataType: expectedDataType);

            if (leftResultExp != null)
            {
                ret.AddToken(leftResultExp);
                ret._completionDataType = leftResultExp.ValueDataType;

                if (scope.Code.ReadExact(':'))
                {
                    var rightResultExp = ExpressionToken.TryParse(scope, endTokens, expectedDataType: expectedDataType);
                    if (rightResultExp != null)
                    {
                        ret.AddToken(rightResultExp);
                    }
                }
            }

            return(ret);
        }
コード例 #2
0
ファイル: AssignmentOperator.cs プロジェクト: cmrazek/DkTools
        public static AssignmentOperator Parse(Scope scope, Token lastToken, OperatorToken opToken, IEnumerable <string> endTokens)
        {
            var ret = new AssignmentOperator(scope);

            if (lastToken != null)
            {
                ret._expectedDataType = lastToken.ValueDataType;
                if (ret._expectedDataType != null)
                {
                    ret.AddToken(lastToken);
                }
            }

            ret.AddToken(opToken);

            var rightExp = ExpressionToken.TryParse(scope, endTokens, expectedDataType: ret._expectedDataType);

            if (rightExp != null)
            {
                ret.AddToken(rightExp);
            }

            return(ret);
        }