Я реализовал синтаксический анализатор выражений в C++ после Shunting-yard algorithm, но у вас возникли проблемы с объяснением в википедии. Это в 'Алгоритм подробно' части:Вопросы по алгоритму Shunting-yard
If the token is an operator, o1, then: while there is an operator token o2, at the top of the operator stack and either o1 is left-associative and its precedence is less than or equal to that of o2, or o1 is right associative, and has precedence less than that of o2, pop o2 off the operator stack, onto the output queue; at the end of iteration push o1 onto the operator stack.
Он говорит "while there is an operator token o2
", на мой undetstanding является "while there is an operator or function token o2
".
Функции должны рассматриваться как операторы и иметь более высокий приоритет, чем все традиционные операторы, так ли это?
Все зависит от языка, который вы пытаетесь реализовать. Кроме того, фактическое имя функции действительно является «оператором вызова» или является ли это открывающей скобкой? И что * является * «токеном функции»? Как вы различаете «токен функции» и любые другие символические маркеры имен (переменные и т. Д.)? И, наконец, не является «оператором вызова функций» (независимо от того, в какой форме он), оператором *? –
@JoachimPileborg Предположим, что я использовал язык «C». Я просто пытался реализовать алгоритм шунтирования после подробностей о википедии. И объяснение в wikipedia имеет «функцию», отличную от «оператора». Я понимаю, что «оператор» здесь, вероятно, означает традиционные операторы, например, на языках C или C++, а «функция» означает форму типа «func (arg1, arg2 ...)» –
@JoachimPileborg Мой код не работает должным образом, изменения, подробно изложенные в моем вопросе. Поэтому я не думаю, что объяснение Википедии достаточно ясное, по крайней мере, это меня смутило. –