我正在编写在Unix编程环境中编写的特殊程序。碰到了语法
list: /* nothing */
| list '\n'
| list expr '\n' { printf("\t%.8g\n", $2); }
;
需要什么
| list '\n'
即使我们不给出那部分语法,它看起来也会有用!那那部分的重要性是什么?
Printf以%.8g给出。这是什么意思?
如果我需要提供一个提示符号该怎么办?就像$ in shell?
答案 0 :(得分:1)
这里有三个完全不相关的问题
list: list '\n'
允许它接受(并忽略)输入中的空白行。没有它,任何空白行都会导致语法错误。%.8g
表示打印{8}精度的double
参数,使用常规或科学记数法,具体取决于指数是什么。如果要打印提示符号,最简单的方法是在词法分析器中执行 - 每次yylex
函数读取换行符时,它应该打印下一行的提示符将换行符返回给解析器。如果你使用flex,这可能是一个规则:
\n { if (interactive) {
printf("$ ");
fflush(stdout); }
return '\n'; }
您可能想要检查输入是来自终端还是文件,并正确设置全局interactive
标记。