📄 expressiontree.cs
字号:
namespace Opus6
{
using System;
using System.IO;
using System.Text;
[Copyright("Copyright (c) 2001 by Bruno R. Preiss, P.Eng."), Version("$Id: ExpressionTree.cs,v 1.4 2001/10/28 19:50:09 brpreiss Exp $")]
public class ExpressionTree : BinaryTree
{
public ExpressionTree(char c) : base(c)
{
}
public static ExpressionTree ParsePostfix(TextReader reader)
{
int num1;
Stack stack1 = new StackAsLinkedList();
while ((num1 = reader.Read()) >= 0)
{
char ch1 = (char) ((ushort) num1);
if (char.IsLetterOrDigit(ch1))
{
stack1.Push(new ExpressionTree(ch1));
}
else if (((ch1 == '+') || (ch1 == '-')) || ((ch1 == '*') || (ch1 == '/')))
{
ExpressionTree tree1 = new ExpressionTree(ch1);
tree1.AttachRight((ExpressionTree) stack1.Pop());
tree1.AttachLeft((ExpressionTree) stack1.Pop());
stack1.Push(tree1);
}
}
return (ExpressionTree) stack1.Pop();
}
public override string ToString()
{
ExpressionVisitor visitor1 = new ExpressionVisitor();
this.DepthFirstTraversal(visitor1);
return visitor1.ToString();
}
private class ExpressionVisitor : AbstractPrePostVisitor
{
public ExpressionVisitor()
{
this.builder = new StringBuilder();
}
public override void InVisit(object obj)
{
this.builder.Append(obj);
}
public override void PostVisit(object obj)
{
this.builder.Append(")");
}
public override void PreVisit(object obj)
{
this.builder.Append("(");
}
public override string ToString()
{
return this.builder.ToString();
}
private StringBuilder builder;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -