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
- 956 reads