BlockSentence.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /**
  2. *
  3. * @author seagle
  4. * @date 2024-7-22
  5. * @Description 块语句处理
  6. */
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace MECF.Framework.UI.Core.DxfScript
  13. {
  14. public class BlockSentence : Sentence
  15. {
  16. private List<Sentence> _sentences = new List<Sentence>();
  17. public int SentencesCount { get { return _sentences.Count; } }
  18. //解析多条语句
  19. public override void Create(StringReader reader)
  20. {
  21. KeywordType kw;
  22. while ((kw = reader.Next()) != KeywordType.KW_EOF)
  23. {
  24. if (kw == KeywordType.KW_IF)
  25. {
  26. //if语句
  27. reader.rollback(kw);
  28. IfSentence ifSentence = new IfSentence();
  29. ifSentence.Create(reader);
  30. _sentences.Add(ifSentence);
  31. }
  32. else if (kw == KeywordType.KW_VARIABLE)
  33. {
  34. //赋值语句
  35. reader.rollback(kw);
  36. SetSentence setSentence = new SetSentence();
  37. setSentence.Create(reader);
  38. _sentences.Add(setSentence);
  39. }
  40. else if (kw == KeywordType.KW_FUNCTION)
  41. {
  42. //函数语句
  43. reader.rollback(kw);
  44. FunSentence setSentence = new FunSentence();
  45. setSentence.Create(reader);
  46. _sentences.Add(setSentence);
  47. }
  48. else if (kw == KeywordType.KW_RETURN)
  49. {
  50. //return语句
  51. reader.rollback(kw);
  52. ReturnSentence returnSentence = new ReturnSentence();
  53. returnSentence.Create(reader);
  54. _sentences.Add(returnSentence);
  55. }
  56. else if (kw == KeywordType.KW_BRACE_RIGHT)
  57. {
  58. break;
  59. }
  60. else if (kw == KeywordType.KW_SEP)
  61. {
  62. continue;
  63. }
  64. else
  65. {
  66. throw new Exception("Unexpected keyword:" + kw);
  67. }
  68. }
  69. }
  70. public override void Execute()
  71. {
  72. foreach (Sentence sentence in _sentences)
  73. {
  74. if (sentence is IfSentence)
  75. {
  76. IfSentence ifSentence = sentence as IfSentence;
  77. ifSentence.Execute();
  78. if (ifSentence.ShouldReturn)
  79. {
  80. ShouldReturn = true;
  81. ReturnVar = ifSentence.ReturnVar;
  82. return;
  83. }
  84. }
  85. else if (sentence is SetSentence)
  86. {
  87. SetSentence setSentence = sentence as SetSentence;
  88. setSentence.Execute();
  89. //ShouldReturn = true;
  90. }
  91. else if (sentence is FunSentence)
  92. {
  93. FunSentence funSentence = sentence as FunSentence;
  94. funSentence.Execute();
  95. //ShouldReturn = true;
  96. }
  97. else if (sentence is BlockSentence)
  98. {
  99. BlockSentence blockSentence = sentence as BlockSentence;
  100. blockSentence.Execute();
  101. if (blockSentence.ShouldReturn)
  102. {
  103. ShouldReturn = true;
  104. ReturnVar = blockSentence.ReturnVar;
  105. return;
  106. }
  107. }
  108. else if (sentence is ReturnSentence)
  109. {
  110. ReturnSentence returnSentence = sentence as ReturnSentence;
  111. returnSentence.Execute();
  112. ShouldReturn = true;
  113. ReturnVar = returnSentence.ReturnVar;
  114. return;
  115. }
  116. }
  117. }
  118. }
  119. }