pascal.js Работающее, но не корректное решение задачи на унарный минус
Primary tabs
Для работающего, но не сильно корреткного решения задачи на унарный минус в синтаксическом анализаторе достаточно правки вроде:
// Разбор множителя scanMultiplier() { let integerConstant = this.symbol; let uncompalsoryMinus = false; if (this.symbol.symbolCode === SymbolsCodes.minus) { uncompalsoryMinus = '-'; this.nextSym(); integerConstant = this.symbol; } this.accept(SymbolsCodes.integerConst); integerConstant.value = uncompalsoryMinus ? -(integerConstant.value) : integerConstant.value; return new NumberConstant(integerConstant); }
-- здесь мы просто подменяем значение в уже существующем типе узла,
такой метод не может быть напр. в ситуации, когда унарный минус будет применять к выражению (выражению в скобках).
Правильное решение состоит в:
- Объявлении нового типа узла, описывающего унарный минус
- Правки движка Engine, которые корреткно обработают новый тип узла
- Log in to post comments
- 403 reads