是否存在用于此符号转换/转换的现有算法?

时间:2010-06-16 15:35:48

标签: algorithm notation

系统的表示法需要将(A+B)*C这样的表达式编写为#MUL(#ADD(A,B),C)。是否已有算法进行此类符号转换,以便用户可以更传统的方式输入? 换句话说,从中缀转换的算法 - >我的记号。第一个问题是我不知道我的符号的确切名称......它类似于反向抛光但不完全相同。每个运算符都被编码为一个带参数的函数。

3 个答案:

答案 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 + ")";
}