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

Parsing 在SML Alice中创建中缀/后缀/前缀解析器,parsing,sml,prefix,postfix-notation,infix-notation,Parsing,Sml,Prefix,Postfix Notation,Infix Notation,因此,我试图在SML中创建一个解析器程序,提示用户输入表达式。然后,它会告知输入的表达式是后缀、前缀还是中缀,然后显示结果。下面是我希望它做的一个示例: Enter Expression: "* + 2 3 4" Postfix: 2 3 + 4 * Prefix: * + 2 3 4 Infix: (2 + 3) * 4 * \-- + \-- 2 \-- 3 \-- 4 我在创建函数以便将结果输出到屏幕时遇到问题,我甚至不确定我是否正确地执行了该方法。我甚至不会把重点放

因此,我试图在SML中创建一个解析器程序,提示用户输入表达式。然后,它会告知输入的表达式是后缀、前缀还是中缀,然后显示结果。下面是我希望它做的一个示例:

Enter Expression: "* + 2 3 4"

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

*
\-- +
    \-- 2
    \-- 3
\-- 4
我在创建函数以便将结果输出到屏幕时遇到问题,我甚至不确定我是否正确地执行了该方法。我甚至不会把重点放在输出树上,直到我首先计算出转换

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);
我觉得应该在第二个if语句中放一个递归方法,检查与运算符的相等性,但由于Alice SML语法的限制,它不允许我这样做。任何帮助都将不胜感激,我的方向是否正确

以下是控制台中的结果:
仅供参考:我是在Alice解释器环境中执行此操作的

我看到您确实取得了一些进展,我建议在您的方法中使用堆栈

我不认为您可以在MLC中实现堆栈该建议可能会有帮助,并会给出有用的评论。不幸的是,这不是一个答案。
val infix_postfix : char list * char list * char list -> char list = _fn
val x : string = "+12"
val expList : char list = [#"+", #"1", #"2"]
val PostfixString : 'a list = []
val operatorStack : char list = [#"a"]
val it : char list = [#"+", #"a"]