Как стать автором
Обновить

Комментарии 2

кстати, в статье "Operator-precedence parser" на вики написано, что приоритет операторов можно указать расстановкой круглых скобок (parenthesize):
"Another approach is to first fully parenthesize the expression, inserting a number of parentheses around each operator, such that they lead to the correct precedence even when parsed with a linear, left-to-right parser." Но здесь не совсем понятно, что означает линейный парсер.

Здесь речь идёт о выражениях, где вокруг каждого оператора стоят скобки (так называемое полноскобочное выражение). В таком выражении действительно не нужны приоритеты и ассоциативность операторам.

Для сравнения вот такие выражения: (1+(2*3)) и ((1+2)*3)

Или такие: (3*(2^(2^3))), (3*((2^2)^3)), (((3*2)^2)^3)

Полная расстановка скобок однозначно определяет порядок действий и при парсинге нам не нужно проверять условия с приоритетом и ассоциативностью. А так линейный парсер — это всё та же сортировочная станция по своей сути, просто чуть упрощённая.

Просто никто в здравом уме не захочет вводить выражения, записанное в такой форме, когда оно содержит больше 3 операций.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации