LINUX.ORG.RU

История изменений

Исправление Int64, (текущая версия) :

Можно ноду «|» указывать флаг, что я по этому пути уже ходил, и выбирать другой при следующем обходе. Пример:

class OrAST: public ExprAST {
    int passes = 0;
    ExprAST *lhs;
    ExprAST *rhs;

    Result *getValue() {
        ++passes;

        if (passes % 2 == 0)
            return rhs->getValue();
        else
            return lhs->getValue();
    }
}
Тут lhs и rhs могут быть обычные числа/символы, либо могут быть операторами +,-,/,*,|

Исправление Int64, :

Можно ноду «|» указывать флаг, что я по этому пути уже ходил, и выбирать другой при следующем обходе. Пример:

class OrAST: public ExprAST {
    int passes = 0;
    ExprAST *lhs;
    ExprAST *rhs;

    Result *getValue() {
        ++passes;

        if (passes % 2 == 0)
            return rhs->getValue();
        else
            return lhs->getValues();
    }
}
Тут lhs и rhs могут быть обычные числа/символы, либо могут быть операторами +,-,/,*,|

Исправление Int64, :

Можно ноду «|» указывать флаг, что я по этому пути уже ходил, и выбирать другой при следующем обходе. Пример:

class OrAST: public ExprAST {
    int passes = 0;
    ExprAST *lhs;
    ExprAST *rhs;

    Result *getValue() {
        passes++;

        if (passes % 2 == 0)
            return rhs->getValue();
        else
            return lhs->getValues();
    }
}
Тут lhs и rhs могут быть обычные числа/символы, либо могут быть операторами +,-,/,*,|

Исходная версия Int64, :

Можно ноду «|» указывать флаг, что я по этому пути уже ходил. И выбирать другой при следующем обходе. Пример:

class OrAST: public ExprAST {
    int passes = 0;
    ExprAST *lhs;
    ExprAST *rhs;

    Result *getValue() {
        passes++;

        if (passes % 2 == 0)
            return rhs->getValue();
        else
            return lhs->getValues();
    }
}
Тут lhs и rhs могут быть обычные числа/символы, либо могут быть операторами +,-,/,*,|