系统的表示法需要将(A+B)*C
这样的表达式编写为#MUL(#ADD(A,B),C)
。是否已有算法进行此类符号转换,以便用户可以更传统的方式输入?
换句话说,从中缀转换的算法 - >我的记号。第一个问题是我不知道我的符号的确切名称......它类似于反向抛光但不完全相同。每个运算符都被编码为一个带参数的函数。
答案 0 :(得分:9)
Shunting-yard algorithm可用于解析中缀表示法。
答案 1 :(得分:1)
这里有一些Lisp that attempts the infix -> prefix transformation。它可以作为一个有用的起点。
答案 2 :(得分:0)
使用Lex和Yacc(Flex和Bison,它们是相同的)解析这些简单的表达式很容易。 Google为“Yacc计算器”。
我发现的一个例子是http://www.indiastudychannel.com/resources/56696-IMPLEMENTATION-OF-CALCULATOR-USING-YACC.aspx,但不是计算结果,而是应该建立最终的字符串。例如,像这样(伪代码):
expr: ‘(‘expr’)’
{
$$=$2;
}
|
expr ‘*’expr
{
$$="#MUL(" + S1 + "," + $3 + ")";
}
|
expr’/’expr
{
$$="#DIV(" + S1 + "," + $3 + ")";
}