是否可以在lex yacc中使用箭头键?

时间:2016-12-30 23:04:53

标签: c yacc lex

我为我的大学开发了一个迷你贝壳。要解析命令行,我使用lex和yacc。

当我向上/向下/向左/向右箭头按下字符串“^ [[显示A或B或C或D时。

按下此键时是否可以识别此字符以执行操作?也许使用ncurses库的功能(我在Linux中)?

我表示,bash使用yacc语法(https://en.wikipedia.org/wiki/GNU_bison),我们可以使用箭头键。所以我认为是可能的。

谢谢。

1 个答案:

答案 0 :(得分:4)

你可以......

基本上, yacc 使用 lex 终端令牌(符号常量)为您提供状态机>。可以把它想象成一个很大的switch陈述。

curses 返回的箭头键( ,如果 ,您调用keypad)在 curses <中定义/ em>头文件作为符号常量,例如 KEY_UP KEY_HOME 等等。{{3}中有一个列表手册页。

curses 库使用自己的状态机读取字符序列,根据终端描述匹配序列并返回常量。

是否从 lex curses 获取常量并不重要。 yacc并不关心。此外,您是否在这种情况下使用 lex ,或者直接拨打 getch 可能无关紧要(取决于您的计划组织方式)。

但大多数人都不会为了解析输入缓冲区上的编辑序列而烦恼lex / yacc。