后缀的括号带有括号,其中“操作数”不是单个标记

时间:2019-05-14 05:58:19

标签: c++ parsing postfix-notation infix-notation

我必须编写一个模仿终端bash外壳的程序,您可以在其中使用连接器将命令放在一起。输入示例为:

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

此表达式可以认为是中缀表达式,其中:

A =回声“你好,世界”

B = ls -a

C =回声“你好,世界”

D = ls -l <​​/ p>

因此表达式可以看作是:

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

连接器&&和||没有优势。

后缀转换的中缀已被广泛讨论,但是在这种情况下,“操作数”不是像数字一样的单个标记。他们是一个字符串。

我很难找到一种解析命令标记的好方法,因此以后可以将它们视为一个。我不知道我是否必须逐行扫描每个字符,还是可以用空格分隔输入行。

有人有什么想法吗?我只是不想沿着永无止境的case语句开始,并弄清楚我的方法不明智。

1 个答案:

答案 0 :(得分:1)

每个项目仍然是单个令牌。您只需要编写一个知道如何将字符串作为单个标记读取的词法分析器即可。用引号引起来时,这很容易。如果不是,则可能会更困难-您(可能)需要决定字符串中可以包含的所有字符,或(等同地)不能包含的字符。然后,当您开始读取不带引号的字符串时,请继续操作直到遇到不属于字符串的内容。

除了词法分析外,转换为后记脚本的方式也非常相似。