0

我想设计一个解析器来识别正确编写的有理数算术表达式。准备好的分析器应该用小数破折号识别符号中的有理数,小数破折号由分子和分母组成,用符号分隔,例如 2 | 3(三分之二)或 12 | 5(五分之十二,即五分之二和二)。

负数和正数都应该被识别。

此外,右括号和左括号以及运算符:+、-、*、/ 应该是可识别的(分别为加法、减法、乘法和除法)。对于每个正确编写的表达式,程序应将其数值打印到标准输出。

现在我可以用整数做类似的代码。我看不到有理数的方法。

你有什么建议吗?

我尝试过这样的事情,但它不会在所有情况下都能正常工作。

bot_max 是最小分母 DIV 是除法字符(int|int 其中| 是除法)

number : INT DIV INT {
  if($3 >= bot_max){
    bot_max = $3;
    $$ = $1;
    }
  else{
    $$ = ($1 * bot_max) / $3;
    }
  }
  | MINUS INT DIV INT {
  if($3 >= bot_max){
    bot_max = $4;
    $$ = $2;
    }
  else{
    $$ = ($2 * bot_max) / $4;
    }
  }
  ;
4

0 回答 0