Exemplo n.º 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);
 }
Exemplo n.º 2
0
Arquivo: Node.cs Projeto: tomoki/Umi
 //messageを受け取る。
 public Node recv_message(Node recv,string message)
 {
     if(recv==null){
         return GetSlot(message)(null);
     }else{
         return GetSlot(message)(recv);
     }
 }
Exemplo n.º 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));
 }
Exemplo n.º 4
0
 public void Set(string str,Node n)
 {
     if(existName(str)){
         SetSub(str,n);
     }else{
         Name[str] = n;
     }
 }
Exemplo n.º 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));
 }
Exemplo n.º 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");
     }
 }
Exemplo n.º 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();
 }
Exemplo n.º 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();
     }
 }
Exemplo n.º 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;
 }
Exemplo n.º 10
0
 public override Node to_s(Node node)
 {
     return new StringNode(Value.ToString());
 }
Exemplo n.º 11
0
 public Node positive(Node node)
 {
     return new NumberNode(1*Value);
 }
Exemplo n.º 12
0
Arquivo: Parser.cs Projeto: tomoki/Umi
 private Node ParseAssignment2(Node node)
 {
     TokenType op_type = tokenType;
     GetToken();
     Node right = ParseExpression();
     Node op = new AssignNode(node,right,op_type);
     return op;
 }
Exemplo n.º 13
0
 public PositiveNode(Node node)
 {
     this.node = node;
 }
Exemplo n.º 14
0
 public override Node to_s(Node node)
 {
     return new StringNode(name);
 }
Exemplo n.º 15
0
Arquivo: Node.cs Projeto: tomoki/Umi
 public virtual Node to_s(Node node)
 {
     return new StringNode("Node");
 }
Exemplo n.º 16
0
 public AssignNode(Node left,Node right,TokenType op_type)
 {
     Right = right;
     Left = left;
     OPType = op_type;
 }
Exemplo n.º 17
0
 public ElifNode(Node boolean,Node TrueBlock)
 {
     this.boolean = boolean;
     this.TrueBlock = TrueBlock;
     excuted = false;
 }
Exemplo n.º 18
0
 public CompareNode(Node left,Node right,TokenType op_type)
 {
     Left = left;
     Right = right;
     OPType = op_type;
 }
Exemplo n.º 19
0
Arquivo: Parser.cs Projeto: tomoki/Umi
 private Node ParseMethod(Node node)
 {
     SymbolNode name = ParseSymbol();
     Node argnode = ParseArguments();
     return new MethodNode(node,argnode,name.Name);
 }
Exemplo n.º 20
0
Arquivo: Parser.cs Projeto: tomoki/Umi
 private Node ParseComparison2(Node node)
 {
     TokenType op_type = tokenType;
     GetToken();
     Node right = ParseAdditiveExpression();
     Node compNode = new CompareNode(node,right,op_type);
     return compNode;
 }
Exemplo n.º 21
0
 public Node assign(Node node)
 {
     Node n = node.eval();
     Block.Set(name,n);
     return n;
 }
Exemplo n.º 22
0
 public void Add(Node n)
 {
     ChildNodes.Add(n);
 }
Exemplo n.º 23
0
 public Node defineFunc(Node node)
 {
     Block.Set(name,node);
     return node;
 }
Exemplo n.º 24
0
 public override Node to_s(Node node)
 {
     return new StringNode("true");
 }
Exemplo n.º 25
0
 public MethodNode(Node node,Node x,string message)
 {
     this.node = node;
     this.x = x;
     this.message = message;
 }
Exemplo n.º 26
0
 public Node negative(Node node)
 {
     return new NumberNode(-1*Value);
 }
Exemplo n.º 27
0
Arquivo: Node.cs Projeto: tomoki/Umi
 //send_messageは、senderのGetSlot(message)した関数にrecvを渡して実行する。
 //これはSmallTalkのオブジェクト指向。
 public Node send_message(Node sender,Node recv,string message)
 {
     return sender.recv_message(recv,message);
 }
Exemplo n.º 28
0
 public Node not(Node n)
 {
     return new TrueNode();
 }
Exemplo n.º 29
0
 //実引数を追加。
 public void Add(Node n)
 {
     arguments.Add(n);
 }
Exemplo n.º 30
0
 public Node not(Node n)
 {
     return new FalseNode();
 }