首页 > 解决方案 > 在“操作数”不是单个标记的情况下使用括号对后缀进行中缀

问题描述

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

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

这个表达式可以被认为是一个中缀表达式,其中:

A = 回声“你好世界”

B = ls -a

C = echo "你好世界再次"

D = ls -l

所以表达式可以看成:

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

连接器 && 和 || 没有优先权。

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

我很难找到一种解析命令令牌的好方法,以便以后可以将它们视为一个。我不知道我是否必须单独扫描行中的每个字符,或者可以用空格分割输入行。

有没有人有任何想法?我只是不想走上一条永无止境的案例陈述之路,然后发现我的方法并不聪明。

标签: c++parsingpostfix-notationinfix-notation

解决方案


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

除了词法分析,转换为 postscript 将与其他情况非常相似。


推荐阅读