Exemple #1
0
 public FunctionNode(Node name,Node paraNode,Node func)
     : base()
 {
     this.name = (SymbolNode)name;
     this.paraNode = (ParametersNode)paraNode;
     this.func = (BlockNode)func;
     this.paraNode.SetBlock(this.func);
 }
Exemple #2
0
 //messageを受け取る。
 public Node recv_message(Node recv,string message)
 {
     if(recv==null){
         return GetSlot(message)(null);
     }else{
         return GetSlot(message)(recv);
     }
 }
Exemple #3
0
 public Node div(Node node)
 {
     Node n = node.eval();
     if(!(node is NumberNode)){
         throw new Exception("Right is not Number");
     }
     return new NumberNode(Value/(((NumberNode)n).Value));
 }
Exemple #4
0
 public void Set(string str,Node n)
 {
     if(existName(str)){
         SetSub(str,n);
     }else{
         Name[str] = n;
     }
 }
Exemple #5
0
 public Node plus(Node node)
 {
     Node n = node.eval();
     if(!(node is StringNode)){
         throw new UmiException("Right is not String");
     }
     return new StringNode(Value+(((StringNode)n).Value));
 }
Exemple #6
0
 public Node equal(Node node)
 {
     if(node is TrueNode){
         return new TrueNode();
     }else if(node is FalseNode){
         return new FalseNode();
     }else{
         throw new UmiException("Right is not boolean");
     }
 }
Exemple #7
0
 public Node call(Node node)
 {
     ArgumentsNode argsNode = (ArgumentsNode)node;
     if(argsNode.Length != paraNode.Length){
         throw new UmiException("Call failed because of args'length");
     }
     for(int i=0;i<argsNode.Length;i++){
         paraNode[i].assign(argsNode[i].eval());
     }
     return func.eval();
 }
Exemple #8
0
 public Node greaterequal(Node node)
 {
     Node n = node.eval();
     if(!(node is NumberNode)){
         throw new Exception("Right is not Number");
     }
     if(((NumberNode)n).Value <= this.Value){
         return new TrueNode();
     }else{
         return new FalseNode();
     }
 }
Exemple #9
0
 public Node print(Node node)
 {
     if(node is ArgumentsNode){
         Node s = null;
         for(int i=0;i<((ArgumentsNode)node).Length;i++){
             s = send_message((((ArgumentsNode)node)[i]).eval(),null,"to_s");
             Console.WriteLine(((StringNode)s).Value);
         }
         return s;
     }else{
         Node s = send_message(node.eval(),null,"to_s");
         Console.WriteLine(((StringNode)s).Value);
         return s;
     }
     return null;
 }
Exemple #10
0
 public override Node to_s(Node node)
 {
     return new StringNode(Value.ToString());
 }
Exemple #11
0
 public Node positive(Node node)
 {
     return new NumberNode(1*Value);
 }
Exemple #12
0
 private Node ParseAssignment2(Node node)
 {
     TokenType op_type = tokenType;
     GetToken();
     Node right = ParseExpression();
     Node op = new AssignNode(node,right,op_type);
     return op;
 }
Exemple #13
0
 public PositiveNode(Node node)
 {
     this.node = node;
 }
Exemple #14
0
 public override Node to_s(Node node)
 {
     return new StringNode(name);
 }
Exemple #15
0
 public virtual Node to_s(Node node)
 {
     return new StringNode("Node");
 }
Exemple #16
0
 public AssignNode(Node left,Node right,TokenType op_type)
 {
     Right = right;
     Left = left;
     OPType = op_type;
 }
Exemple #17
0
 public ElifNode(Node boolean,Node TrueBlock)
 {
     this.boolean = boolean;
     this.TrueBlock = TrueBlock;
     excuted = false;
 }
Exemple #18
0
 public CompareNode(Node left,Node right,TokenType op_type)
 {
     Left = left;
     Right = right;
     OPType = op_type;
 }
Exemple #19
0
 private Node ParseMethod(Node node)
 {
     SymbolNode name = ParseSymbol();
     Node argnode = ParseArguments();
     return new MethodNode(node,argnode,name.Name);
 }
Exemple #20
0
 private Node ParseComparison2(Node node)
 {
     TokenType op_type = tokenType;
     GetToken();
     Node right = ParseAdditiveExpression();
     Node compNode = new CompareNode(node,right,op_type);
     return compNode;
 }
Exemple #21
0
 public Node assign(Node node)
 {
     Node n = node.eval();
     Block.Set(name,n);
     return n;
 }
Exemple #22
0
 public void Add(Node n)
 {
     ChildNodes.Add(n);
 }
Exemple #23
0
 public Node defineFunc(Node node)
 {
     Block.Set(name,node);
     return node;
 }
Exemple #24
0
 public override Node to_s(Node node)
 {
     return new StringNode("true");
 }
Exemple #25
0
 public MethodNode(Node node,Node x,string message)
 {
     this.node = node;
     this.x = x;
     this.message = message;
 }
Exemple #26
0
 public Node negative(Node node)
 {
     return new NumberNode(-1*Value);
 }
Exemple #27
0
 //send_messageは、senderのGetSlot(message)した関数にrecvを渡して実行する。
 //これはSmallTalkのオブジェクト指向。
 public Node send_message(Node sender,Node recv,string message)
 {
     return sender.recv_message(recv,message);
 }
Exemple #28
0
 public Node not(Node n)
 {
     return new TrueNode();
 }
Exemple #29
0
 //実引数を追加。
 public void Add(Node n)
 {
     arguments.Add(n);
 }
Exemple #30
0
 public Node not(Node n)
 {
     return new FalseNode();
 }