Как расширить инфиксы и приоритеты стека для дополнительных операторов? - PullRequest
0 голосов
/ 14 ноября 2008

Как будут расширены приоритеты инфикса и стека, чтобы включить операторы <, >, <=, >=, ==, !=, !, && и ||

При синтаксическом анализе инфиксного выражения, например: P + (Q – F) / Y#, каждый символ имеет приоритет, соответствующий их порядку работы. / и * имеют более высокий приоритет, чем + и -.

Вот приоритеты, которые я имею / понимаю:

Priority * / + - ( )   #

Infix    2 2 1 1 3 0   0 

Stack    2 2 1 1 0 n/a 0

1 Ответ

1 голос
/ 09 января 2009

Это зависит от того, какие приоритеты вы хотите, верно? Если вы не спрашиваете о приоритетах на конкретном языке (если так, уточните).

В любом случае, <,>, <= и> = не применяются к логическим значениям, == и! = Применяются ко всему, а!, && и || применяется исключительно к логическим значениям. Но они ВСЕ возвращают логические значения, поэтому вы хотите применить те, которые в первую очередь не применяются к логическим значениям, затем те, которые могут применяться к логическим значениям, и, наконец, те, которые применяются только к логическим значениям. Что касается последнего, имеет приоритет над && и ||. Хотя это и не обязательно, я бы сделал так, чтобы && имел приоритет над ||, потому что некоторые логические обозначения работают таким образом.

Таким образом, приоритет будет в итоге:

(
* /
+ -
< > <= >=
== !=
!
&&
||
) #
...