为什么hoc1语法有以下规则

时间:2014-03-31 16:17:09

标签: unix grammar yacc context-free-grammar computation-theory

我正在编写在Unix编程环境中编写的特殊程序。碰到了语法

list:     /* nothing */
        | list '\n'
        | list expr '\n'    { printf("\t%.8g\n", $2); }
        ;

需要什么

| list '\n'

即使我们不给出那部分语法,它看起来也会有用!那那部分的重要性是什么?

Printf以%.8g给出。这是什么意思?

如果我需要提供一个提示符号该怎么办?就像$ in shell?

1 个答案:

答案 0 :(得分:1)

这里有三个完全不相关的问题

  1. 规则list: list '\n'允许它接受(并忽略)输入中的空白行。没有它,任何空白行都会导致语法错误。
  2. 格式说明符%.8g表示打印{8}精度的double参数,使用常规或科学记数法,具体取决于指数是什么。
  3. 如果要打印提示符号,最简单的方法是在词法分析器中执行 - 每次yylex函数读取换行符时,它应该打印下一行的提示符将换行符返回给解析器。如果你使用flex,这可能是一个规则:

    \n    { if (interactive) {
              printf("$ ");
              fflush(stdout); }
            return '\n'; }
    

    您可能想要检查输入是来自终端还是文件,并正确设置全局interactive标记。