使用 Flex/Bison 作为终端仿真器后端的解析器是个坏主意吗?

Is it bad idea to use Flex/Bison as parser for backend of terminal emulator?

我正在实现类似于 OSX 的默认终端仿真器的终端仿真器:Terminal.app。

我用 openpty 打开终端连接,然后使用 Flex 解析传入的输入:普通文本和 control sequences 以及 Bison,它根据 Flex 生成的标记(插入字符串、光标前移序列)调用回调ETC)。

  1. 连同普通的文本标记,我已经实现了大约 30 个转义序列,没有任何突出的问题。
  2. 我使 Flex/Bison 可重入,因为我需要多个终端 windows 同时工作
  3. 根据我的另一个问题 .
  4. ,我做了一些变通方法使 Flex/Bison 读取连续输出

到目前为止,Flex/Bison 似乎完成了他们的工作,但是我怀疑迟早我会遇到一些揭示 Flex/Bison 不应该用作解析终端的工具的东西输入。

问题是:Flex/Bison如果用它们代替手写的终端输入解析器会导致什么问题?性能会成为问题吗?

缩写有时会有帮助:

@ejp 所说的是您的解决方案中不需要 bison,因为只有一种方法可以解释来自词法分析器的标记。提到的堆栈用于保存机器状态,同时查看可以解释输入的替代方式。

在考虑 flex(可能还有 bison)是否是一个好方法时,我会更关心你将如何解决控制 characters 的问题,这可以是穿插在控制 序列 .

进一步阅读: