如何制作一个接受导航键的Lex / Yacc解析器?

时间:2015-01-01 15:41:41

标签: yacc lex

我使用Lex / Yacc创建了一个简单的解析器。

我的问题是,当我运行这个解析器并在控制台中键入文本时,每次按下左箭头键,光标都不会按预期向左移动,而是我得到这个奇怪的字符组:" ^ [[D"

您是否知道如何使左箭头键按预期工作?

谢谢。

1 个答案:

答案 0 :(得分:1)

这就是发生的事情:箭头键生成一系列字符,而不是单个字符。这是古老的VT100代码。三个字符序列[A为向上,[B为向下,[C为右,[D为左。

某些应用程序(如KSHELL)处理这些转义序列。当你执行左箭头时,他们知道将转义序列发送回终端/终端窗口,向左移动光标,它们在内部移动插入位置的位置。

此类应用程序也可以进行单字符输入。

如果您只是进行普通的C / C ++或其他高级语言读取操作,则您没有可用的功能。您的通用C / C ++输入不会逐个字符地返回数据。相反,它会缓冲数据,直到您键入。换句话说,这不是YACC / LEX问题,而是一般的输入编程问题。

如果你想要编辑功能,你需要一些能够执行字符级输入并处理转义序列的东西。

正如评论所说,你需要使用一些能够为你处理这个问题的库。