コード例 #1
0
 public void CallTest()
 {
     // Number.parse("2")
     // (Number.parse)(Number,"2")
     SRUExpression exp = new SRUCallExpression()
     {
         Method = new SRURefExpression()
         {
             Env = new SRURefExpression()
             {
                 Env = null,
                 Name = "Number",
             },
             Name = "parse",
         },
         Args = new SRUExpression[]{
             new SRURefExpression()
             {
                 Env = null,
                 Name = "Number",
             },
             new SRUStringExpression(){
                 Value = "2",
             },
         },
     };
     Assert.AreEqual(Library.Evaluator.Invoke("eval_expression", exp).ToString(), "<Number: 2 >");
 }
コード例 #2
0
ファイル: SRUEvaluator.cs プロジェクト: ikeji/SRU2
 public SRUObject Visit(SRUCallExpression call)
 {
     SRUObject proc = call.Method.Accept(this);
     SRUObject[] args = new SRUObject[call.Args.Length];
     for (int i = 0; i < args.Length; i++)
     {
         args[i] = call.Args[i].Accept(this);
     }
     return proc.Call(args);
 }
コード例 #3
0
 public void ClosureTest()
 {
     // {|a| a }(Number)
     SRUExpression exp = new SRUCallExpression()
     {
         Method = new SRUClosureExpression()
         {
             FormalArgument = new string[] { "a" },
             Expressions = new SRUExpression[]{
                 new SRURefExpression(){
                     Env = null,
                     Name = "a",
                 },
             },
         },
         Args = new SRUExpression[]{
             new SRURefExpression()
             {
                 Env = null,
                 Name = "Number",
             },
         },
     };
     Assert.AreEqual(Library.Evaluator.Invoke("eval_expression", exp).ToString(), "Number");
 }
コード例 #4
0
 public void ExpTest()
 {
     // 1 + 2
     // Number.parse("1") + Number.parse("2")
     // Number.parse("1").add(Number.parse("2"));
     // {|a,b| (a.add)(a,b))(Number.parse("1"),Number.parse("2"))
     // {|a,b| (a.add)(a,b))({|a,b| (a.parse)(a,b)}(Number,"1"),{|a,b| (a.parse)(a,b)}(Number,"2"))
     SRUExpression exp = new SRUCallExpression()
     {
         // {|a,b| (a.add)(a,b) }
         Method = new SRUClosureExpression()
         {
             FormalArgument = new string[] { "a", "b" },
             Expressions = new SRUExpression[]{
                 // (a.add)(a,b)
                 new SRUCallExpression(){
                     //(a.add)
                     Method = new SRURefExpression{
                         Env = new SRURefExpression(){
                             Env = null,
                             Name = "a",
                         },
                         Name = "add",
                     },
                     // (a,b)
                     Args = new SRUExpression[]{
                         new SRURefExpression(){
                             Env = null,
                             Name = "a",
                         },
                         new SRURefExpression(){
                             Env = null,
                             Name = "b",
                         },
                     },
                 },
             },
         },
         Args = new SRUExpression[]{
             // {|a,b| (a.parse)(a,b)}(Number,"1")
             new SRUCallExpression(){
                 // {|a,b| (a.parse)(a,b)}
                 Method = new SRUClosureExpression(){
                     FormalArgument = new string[]{ "a", "b" },
                     Expressions = new SRUExpression[]{
                         // (a.parse)(a,b)
                         new SRUCallExpression(){
                             // (a.parse)
                             Method = new SRURefExpression{
                                 Env = new SRURefExpression(){
                                     Env = null,
                                     Name = "a",
                                 },
                                 Name = "parse",
                             },
                             // (a,b)
                             Args = new SRUExpression[]{
                                 new SRURefExpression(){
                                     Env = null,
                                     Name = "a",
                                 },
                                 new SRURefExpression(){
                                     Env = null,
                                     Name = "b",
                                 },
                             },
                         },
                     },
                 },
                 // (Number,"1")
                 Args = new SRUExpression[]{
                     new SRURefExpression(){
                         Env = null,
                         Name = "Number",
                     },
                     new SRUStringExpression(){
                         Value = "1",
                     },
                 },
             },
             // {|a,b| (a.parse)(a,b)}(Number,"2")
             new SRUCallExpression(){
                 // {|a,b| (a.parse)(a,b)}
                 Method = new SRUClosureExpression(){
                     FormalArgument = new string[]{ "a", "b" },
                     Expressions = new SRUExpression[]{
                         // (a.parse)(a,b)
                         new SRUCallExpression(){
                             // (a.parse)
                             Method = new SRURefExpression{
                                 Env = new SRURefExpression(){
                                     Env = null,
                                     Name = "a",
                                 },
                                 Name = "parse",
                             },
                             // (a,b)
                             Args = new SRUExpression[]{
                                 new SRURefExpression(){
                                     Env = null,
                                     Name = "a",
                                 },
                                 new SRURefExpression(){
                                     Env = null,
                                     Name = "b",
                                 },
                             },
                         },
                     },
                 },
                 // (Number,"2")
                 Args = new SRUExpression[]{
                     new SRURefExpression(){
                         Env = null,
                         Name = "Number",
                     },
                     new SRUStringExpression(){
                         Value = "2",
                     },
                 },
             },
         },
     };
     Assert.AreEqual(Library.Evaluator.Invoke("eval_expression", exp).ToString(), "");
 }
コード例 #5
0
 public void ClosureTest2()
 {
     // {|a,b| (a.parse)(a,b) }(Number,"3")
     SRUExpression exp = new SRUCallExpression()
     {
         Method = new SRUClosureExpression()
         {
             FormalArgument = new string[] { "a", "b" },
             Expressions = new SRUExpression[]{
                 new SRUCallExpression(){
                     Method = new SRURefExpression(){
                         Env = new SRURefExpression(){
                             Env = null,
                             Name = "a",
                         },
                         Name = "parse",
                     },
                     Args = new SRUExpression[]{
                         new SRURefExpression(){
                             Env = null,
                              Name = "a",
                         },
                         new SRURefExpression(){
                             Env = null,
                              Name = "b",
                         },
                     },
                 },
             },
         },
         Args = new SRUExpression[]{
             new SRURefExpression()
             {
                 Env = null,
                 Name = "Number",
             },
             new SRUStringExpression(){
                 Value = "3",
             },
         },
     };
     Assert.AreEqual(Library.Evaluator.Invoke("eval_expression", exp).ToString(), "<Number: 3 >");
 }