>我所知道的所有POSIX shell实现都是用C语言编写的,但我没有特别研究过这个问题.
> POSIX shell(我假设你的意思是像bash一样)语法相当复杂. lexing和解析之间没有明确的分离.另一方面,解析几乎不需要任何回溯.因此解析器生成器可能没有那么多帮助.
编辑,因为你已经澄清了你想要的shell语法:
我认为你最好的选择是使用现有的shell.以下是一些架构注意事项:
>您只需将应用程序链接到现有shell即可.添加操作资产管理系统的内置函数.可能存在许可问题.这为每个shell实例提供了一个应用程序实例
>您可以使用简单的客户端 – 服务器体系结构,其中服务器是应用程序的一部分,只响应没有控制逻辑的简单命令,客户端链接到shell,不直接访问应用程序数据.几个shell(bash,ksh,zsh)已经有了TCP访问的手段.
您可能不需要重新发明通信协议;考虑通过HTTP(S),服务器和客户端实现随时可用.事实上,你甚至可以在客户端只使用wget或curl脚本,因此根本不需要修补shell(这会使客户端保持复杂状态).
如果你需要修补shell(比如添加内置函数),可以考虑使用zsh,它有一个模块系统.您的应用程序(或客户端部分)将显示为定义内置函数和您需要的任何其他内容的模块(例如,zsh发行版包含ftp和mmap之类的模块).