使用Flex和Bison向shell添加别名功能



我正在使用C、Flex和Bison构建一个shell。目前,我已经能够创建别名,将它们与各自的命令存储在表中,并识别何时输入了有效的别名。现在,我正在尝试实现处理别名,以便在输入有效别名时,执行正确的命令。我的想法是,一旦找到一个有效的别名,我必须以某种方式再次通过flex/bison运行相应的命令,就好像它是一个完全独立的输入一样

我是Flex和Bison的新手,所以我不确定该怎么做。总的来说,我希望"你应该检查出X函数",而不是坚实的实现,因为我正在使用这个项目作为一种学习体验。以下是我的flex和bison文件,以备不时之需:http://pastebin.com/t9QhkVUe

编辑:如果需要,我还可以提供主要的Shell代码。

您应该检查flex的缓冲区堆栈函数。您可以将一个新的缓冲区推送到缓冲区堆栈,设置为别名的字符串值,然后在<<EOF>>规则中弹出缓冲区堆栈。请参阅flex手册中的多个输入缓冲区,其中有一个示例。

令牌不能在缓冲区中启动并在缓冲区弹出后继续,但在这种情况下这很好,因为不应允许别名的结果"运行"到以下文本中。

不要忘记检查递归别名扩展。若要模拟标准shell,需要对当前正在展开的任何别名字抑制别名展开。例如,您可以通过在别名符号表中放置"being_expanded"标志来实现这一点。

最新更新