【发布时间】:2016-01-04 08:26:47
【问题描述】:
我目前正在创建 Linux shell 以了解有关系统调用的更多信息。
我已经弄清楚了大部分事情。解析器,令牌生成,将适当的东西传递给适当的系统调用 - 工作。
问题是,甚至在我开始制作标记之前,我就将整个命令字符串拆分为单独的单词。它基于分隔符数组,而且效果出奇的好。除了我正在努力为它添加额外的功能,比如转义序列或引号。没有它我真的活不下去,因为即使是使用基本 grep 命令的人也会使用带引号的参数。我需要添加以下功能:
-
' '- 忽略这两者之间的所有其他分隔符、运算符或双引号,将其作为一个字符串传递,不要将这些引号包含在结果单词中, -
" "- 同上,但忽略单引号, -
\\- 将其转义为单个反斜杠, -
\(space)- 将其转义到空格中,不要将生成的空格解析为分隔符 -
\"、\'- 与上述类似。 - 我还没有弄清楚我需要的许多其他东西
而且它们中的每一个本身似乎都是一个例外。它们中的每一个都必须对命令中可能的位置的多样性进行操作,是否包含在结果中,对其余的解析产生影响。它使我的代码看起来像一个大泥球。
有没有更好的方法来做到这一点?为此目的是否有更通用的算法?
【问题讨论】:
-
为什么不使用 Lex/Yacc - en.wikipedia.org/wiki/Lex_%28software%29?
-
@EdHeal 我一定会试试的