在 SML Alice 中创建中缀/后缀/前缀解析器
Posted
技术标签:
【中文标题】在 SML Alice 中创建中缀/后缀/前缀解析器【英文标题】:Creating a infix/postfix/prefix parser in SML Alice 【发布时间】:2015-04-27 19:56:51 【问题描述】:所以我试图在 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 语法的限制,它不允许我这样做。任何帮助将不胜感激,我是否朝着正确的方向前进?
这是控制台中的结果:
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"]
仅供参考:我在 Alice Interpreter Environment 中执行此操作
【问题讨论】:
【参考方案1】:我看到你确实取得了一些进展,我建议在你的方法中使用堆栈
【讨论】:
我不认为你可以在 ML 中实现堆栈 该建议可能会有所帮助,并会做出有用的评论。不幸的是,这不是答案。以上是关于在 SML Alice 中创建中缀/后缀/前缀解析器的主要内容,如果未能解决你的问题,请参考以下文章