Chinaunix

标题: 问一个语法分析的问题 [打印本页]

作者: justlooks    时间: 2012-04-21 10:52
标题: 问一个语法分析的问题
比如以下的表达式,那么引用 expr是算 $2还是$3??

  1. 9716 where_clause:
  2. 9717           /* empty */  { Select->where= 0; }
  3. 9718         | WHERE
  4. 9719           {
  5. 9720             Select->parsing_place= IN_WHERE;
  6. 9721           }
  7. 9722           expr
复制代码

作者: walleeee    时间: 2012-04-21 17:48
我觉得你给的看起来不是太完整,你看下面这个如何?
  1.      input   : /* empty */
  2.              | input line
  3.      ;
  4.      
  5.      line    : '\n'
  6.              | exp '\n' { printf ("%d\n", $1); }
  7.      ;
  8.      
  9.      exp     : NUM           { $ = $1; }
  10.              | exp '+' exp   { $ = $1 + $3; }
  11.              | exp '-' exp   { $ = $1 - $3; }
  12.              | exp '*' exp   { $ = $1 * $3; }
  13.              | exp '/' exp
  14.                  {
  15.                    if ($3)
  16.                      $ = $1 / $3;
  17.                    else
  18.                      {
  19.                        $ = 1;
  20.                        fprintf (stderr, "%d.%d-%d.%d: division by zero",
  21.                                 @3.first_line, @3.first_column,
  22.                                 @3.last_line, @3.last_column);
  23.                      }
  24.                  }
  25.              | '-' exp %prec NEG     { $ = -$2; }
  26.              | exp '^' exp           { $ = pow ($1, $3); }
  27.              | '(' exp ')'           { $ = $2; }
复制代码

作者: justlooks    时间: 2012-04-23 11:01
我的意思是当解析为"标识符 { 处理过程 } 标识符2" ,那么处理过程会不会占一个位置,比如"标识符 标识符2",取第2个标识符就是$2,而之前的情况 因为处理过程占了原先$2的位置,如果标识符2后面还有处理过程的话,那么这个处理过程是应该取第3个参数才会引用到标识符2这个东西?是这样的嘛?
作者: walleeee    时间: 2012-04-23 11:10
回复 3# justlooks


我不太记得,印象中是要占1个。再说,你2,3方便试一下再说么?
作者: justlooks    时间: 2012-04-23 11:15
回复 4# walleeee


    问题我这方面完全不懂,所以才问的,要不我就自己测试了
作者: walleeee    时间: 2012-04-23 11:47
回复 5# justlooks


    不是。你没懂我的意思。

我是说你怀疑2,3,你把它们都试一下就2个情况,看谁行
作者: walleeee    时间: 2012-04-23 11:48
回复 5# justlooks


    还有,建议你也试试leamon,这个根本就不存在你说的问题




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2