4

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

4

3 回答 3

9

调车码算法可用于解析中缀符号。

于 2010-06-16T15:41:48.943 回答
1

这是一些尝试中缀 -> 前缀转换的 Lisp。它可以作为一个有用的起点。

于 2010-06-16T15:41:49.997 回答
0

使用 Lex 和 Yacc(Flex 和 Bison,它们是相同的)很容易解析这些简单的表达式。谷歌搜索“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 + ")";
}
于 2010-06-16T15:42:07.400 回答