Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.87 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using System.Text;
  6. using AgileObjects.ReadableExpressions;
  7. using System.IO;
  8. using System.Globalization;
  9.  
  10. namespace ConsoleApp3
  11. {
  12. class Program
  13. {
  14. static void Testc()
  15. {
  16. ParameterExpression value = Expression.Parameter(typeof(int), "value");
  17.  
  18. // Creating an expression to hold a local variable.
  19. ParameterExpression result = Expression.Parameter(typeof(int), "result");
  20.  
  21. // Creating a label to jump to from a loop.
  22. LabelTarget label = Expression.Label(typeof(int));
  23.  
  24. // Creating a method body.
  25. BlockExpression block = Expression.Block(
  26. new[] { result },
  27. Expression.Assign(result, Expression.Constant(1)),
  28. Expression.Loop(
  29. Expression.IfThenElse(
  30. Expression.GreaterThan(value, Expression.Constant(1)),
  31. Expression.MultiplyAssign(result,
  32. Expression.PostDecrementAssign(value)),
  33. Expression.Break(label, result)
  34. ),
  35. label
  36. )
  37. );
  38.  
  39. Console.WriteLine(block.ToReadableString());
  40. int factorial = Expression.Lambda<Func<int, int>>(block, value).Compile()(5);
  41.  
  42. Console.WriteLine(factorial);
  43. }
  44.  
  45. static IConvertible[] Read(BinaryReader reader, List<object[]> SubTables)
  46. {
  47. IConvertible[] result = new IConvertible[100];
  48.  
  49. result[1] = reader.ReadInt32();
  50. result[2] = reader.ReadInt32();
  51. result[3] = reader.ReadInt32();
  52.  
  53. var t1 = SubTables[1];
  54. // t1.
  55. for (int i = 0; i < result[5].ToInt32(CultureInfo.InvariantCulture); ++i)
  56. {
  57. t1[0] = reader.ReadInt32();
  58.  
  59. for (int j = 0; j < result[5].ToInt32(CultureInfo.InvariantCulture); ++j)
  60. {
  61. SubTables[3][0] = reader.ReadInt32();
  62. }
  63. }
  64.  
  65. return result;
  66. }
  67.  
  68. static void Main(string[] args)
  69. {
  70. Testc();
  71. Console.ReadLine();
  72. // Creating an expression to hold a local variable.
  73. ParameterExpression result = Expression.Parameter(typeof(int[]), "result");
  74.  
  75. // var array = new array[5];
  76. List<Expression> list = new List<Expression>();
  77. list.Add(Expression.Assign(result,
  78. Expression.NewArrayBounds(typeof(int), Expression.Constant(5)))
  79. );
  80.  
  81. for (int i = 0; i < 5; ++i)
  82. {
  83. // array[i] = i;
  84. var e = Expression.Assign(
  85. Expression.ArrayAccess(result, Expression.Constant(i)),
  86. Expression.Constant(i)
  87. );
  88.  
  89. list.Add(Expression.Assign(
  90. Expression.ArrayAccess(result, Expression.Constant(i)),
  91. Expression.Constant(i)
  92. ));
  93. }
  94.  
  95. {
  96. var eee = Expression.Variable(typeof(int), "var_int");
  97. Expression.Assign(eee,
  98. Expression.Call(
  99. Expression.Constant(args),
  100. typeof(Expression).GetMethod("AddIntegers", new Type[] { typeof(int), typeof(int) }),
  101. Expression.Constant(0))
  102. );
  103.  
  104. Expression.Assign(
  105. Expression.ArrayAccess(result, Expression.Constant(10)),
  106. eee);
  107. }
  108.  
  109. var variable = list.OfType<ParameterExpression>().FirstOrDefault(v => v.Name == "var_");
  110.  
  111. list.Add(result);
  112.  
  113. var block = Expression.Block(new[] { result }, list);
  114.  
  115.  
  116. Console.WriteLine(block.ToReadableString());
  117.  
  118. var a = Expression.Lambda<Func<int[]>>(block).Compile()();
  119.  
  120. Console.WriteLine(a);
  121.  
  122. Console.ReadLine();
  123. }
  124.  
  125. static List<Expression> expressions = new List<Expression>();
  126.  
  127. static void CreateReadType(ParameterExpression result, BinaryReader reader, int index, string name)
  128. {
  129. var variable = Expression.Variable(typeof(int), "var_"+ name);
  130. expressions.Add(variable);
  131.  
  132. expressions.Add(
  133. Expression.Assign(variable,
  134. Expression.Call(
  135. Expression.Constant(reader),
  136. typeof(BinaryReader).GetMethod("ReadInt32", new Type[] { typeof(int) }),
  137. Expression.Constant(0)))
  138. );
  139.  
  140. expressions.Add(Expression.Assign(
  141. Expression.ArrayAccess(result, Expression.Constant(index)),
  142. variable)
  143. );
  144. }
  145. }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement