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