Пример #1
0
 string parseTernary(string s) {
     if (s.length() <= 1) return s;
     int level = 0;
     char c = s[0];
     for (int i = 1; i < s.length(); i++) {
         if (s[i] == '?') level++;
         else if (s[i] == ':') {
             if (--level == 0) return c == 'T' ? parseTernary(s.substr(2, i-2)) : parseTernary(s.substr(i+1));
         }
     }
     return "";
 }
Пример #2
0
	Expression* parseTernary(TokenStream* tokens, FileContext* fileContext)
	{
		Expression* expression = parseInequality(tokens, fileContext);
		if (tokens->safePeekValue() == "?")
		{
			Token questionToken = tokens->pop();
			Expression* trueExpression = parseTernary(tokens, fileContext);
			tokens->popExpected(":");
			Expression* falseExpression = parseTernary(tokens, fileContext);
			expression = new Ternary(expression, questionToken, trueExpression, falseExpression, fileContext);
		}
		return expression;
	}
 string parseTernary(string expression) {
     // start coding at 10:40
     int que = 0;
     while (que < expression.size() && expression[que] != '?') que += 1;
     if (que == expression.size()) return expression;
     
     int col = que+1;
     int qCount = 0;
     while (expression[col] != ':' || qCount) {
         if (expression[col] == '?') qCount += 1;
         if (expression[col] == ':') qCount -= 1;
         col += 1;
     }
     
     if (expression[0] == 'T') return parseTernary(expression.substr(que+1, col-que-1));
     else return parseTernary(expression.substr(col+1, expression.size()-col-1));
 }
Пример #4
0
	// This function doesn't do anything special, but it's easier to call this instead
	// of remembering that parseTernary is the outermost of the order of operations.
	Expression* parseExpression(TokenStream* tokens, FileContext* fileContext)
	{
		return parseTernary(tokens, fileContext);
	}