在SML Alice中创建中缀/后缀/前缀解析器

时间:2015-04-27 19:56:51

标签: parsing sml prefix postfix-notation infix-notation

所以我试图在SML中创建一个解析器程序,提示用户输入表达式。然后它会告诉输入的表达式是在后缀,前缀还是中缀中,然后它会显示结果。这是我想要它做的一个例子:

UISwitch

我在创建函数时遇到问题,因此它将结果输出到屏幕,我不确定我是否正确地执行了该方法。在我首先找出转换之前,我甚至都没有专注于输出树。

Enter Expression: "* + 2 3 4"

Postfix: 2 3 + 4 *
Prefix: * + 2 3 4
Infix: (2 + 3) * 4

*
\-- +
    \-- 2
    \-- 3
\-- 4

我觉得我应该在第二个if语句(检查与运算符的相等性)中放置一个递归方法,但由于Alice SML语法的限制,它不允许我。任何帮助将不胜感激,我甚至正朝着正确的方向前进?

以下是控制台中的结果:

fun infix_postfix(PostfixString,operatorStack,expList) = 
  if null expList then operatorStack
    else    
      if(hd expList = #"^" orelse
        hd expList = #"*" orelse
        hd expList = #"/" orelse
        hd expList = #"+" orelse
        hd expList = #"-" =  true)
        then 
          hd expList:: operatorStack
       else
          infix_postfix(hd expList :: PostfixString, operatorStack, tl expList);

val x = "+12";
val expList = (explode x);
val PostfixString = [];
val operatorStack = [#"a"];
infix_postfix(PostfixString, operatorStack, expList);

仅供参考:我是从Alice解释器环境

这样做的

1 个答案:

答案 0 :(得分:-1)

我发现你确实取得了一些进展,我建议你在方法中使用一个堆栈