Как я могу проверить, является ли данное выражение инфиксным выражением, постфиксным выражением или префиксным выражением?
Мне нужны алгоритмы, которые будут проверять, является ли данное выражение выражением инфиксным, постфиксным или префиксным. Я попробовал метод, проверив первый или последние 2 условия строки, например
+AB, если в самом первом индексе строки есть оператор, то его префикс
AB+ если в самом последнем индексе строки есть оператор, то это постфикс
иначе это инфикс.
Но это не кажется уместным, поэтому предложите мне лучший алгоритм.
2 ответа
- Если он начинается с действительного инфиксного оператора, это инфиксный, если только вы не собираетесь разрешать унарные операторы.
- Если он заканчивается допустимым оператором postfix, это postfix.
- В противном случае он либо инфиксный, либо недействительный.
Обратите внимание, что (3) включает в себя случай, который вы упомянули в комментариях к выражению в скобках. В префиксе или постфиксе нет скобок. Вот почему они существуют. (3) также включает в себя вырожденный случай одного члена, например, 1
, но в этом случае не имеет значения, как вы анализируете это.
Вы можете обнаружить недопустимое выражение, только проанализировав его полностью.
Если вы собираетесь разрешить унарные операторы в инфиксной нотации, я могу только предложить вам попробовать все три анализа и остановиться, когда вы добьетесь успеха. Очень возможно, что это стратегия, которой вы должны следовать в любом случае.
проверить первые элементы в строке.1- если первый элемент является оператором, то это точно префиксное выражение 2- иначе проверить второй элемент, если это оператор, то это точно инфикс 3- иначе, это наверняка постфикс