Infix to Postfix с круглыми скобками, где «операнды» не являются одиночными токенами - PullRequest
0 голосов
/ 14 мая 2019

Мне нужно написать программу, которая имитирует оболочку терминала, где вы можете соединять команды, используя соединители.Примером ввода может быть:

(echo "hello world" && ls -a) || (echo "hello world again" && ls -l)

Это выражение можно рассматривать как инфиксное выражение, где:

A = echo "hello world"

B = ls-a

C = эхо «Привет, мир снова»

D = ls -l

Таким образом, выражение можно увидеть как:

(A && B) || (C && D)

Разъемы && и ||не имеет приоритета.

Преобразование из инфикса в постфикс широко освещалось, но «операнды» в этом случае не являются единичными токенами, как число.Они строка.

Мне трудно найти хороший подход для разбора командных токенов, чтобы потом я мог обращаться с ними как с одним.Я не знаю, должен ли я сканировать каждый символ отдельно в строке, или я могу разделить строку ввода пробелом.

У кого-нибудь есть идеи?Я просто не хочу идти по пути бесконечных падежных операторов и понять, что мой метод не очень умен.

1 Ответ

1 голос
/ 14 мая 2019

Каждый предмет все еще является одним токеном. Вам просто нужно написать лексер, который знает, как читать строку как один токен. Когда строка заключена в кавычки, это довольно просто. Когда это не так, это может быть более сложным - вам (вероятно) нужно либо выбрать все символы, которые могут быть в строке, либо (что эквивалентно) те, которые не могут. Затем, когда вы начинаете читать строку без кавычек, вы продолжаете, пока не столкнетесь с чем-то, что не может быть частью строки.

Кроме лексинга, преобразование в postscript будет в значительной степени таким же, как и в противном случае.

...