我想设计一个解析器来识别正确编写的有理数算术表达式。准备好的分析器应该用小数破折号识别符号中的有理数,小数破折号由分子和分母组成,用符号分隔,例如 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;
}
}
;