SimpleLogic.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. namespace ExpressionLib.Contexts
  7. {
  8. public class SimpleLogic : IContext<bool>
  9. {
  10. public int NumParams(string oprtr)
  11. {
  12. if (oprtr == "!" || oprtr == "not")
  13. return 1;
  14. else
  15. return 2;
  16. }
  17. public bool EvalOperator(string c, List<bool> values)
  18. {
  19. if (c == "!" || c == "not")
  20. return !values[0];
  21. else if (c == "&" || c == "&&")
  22. return (values[0] && values[1]);
  23. else if (c == "|" || c == "||")
  24. return (values[0] || values[1]);
  25. else if (c == "^" || c == "xor")
  26. return ( (values[0] && !values[1]) || (values[1] && !values[0]));
  27. else if (c == ">" || c == "->" || c == "=>" || c == "implies")
  28. return (!values[0] || values[1]);
  29. else if (c == "<->" || c == "<=>" || c == "=")
  30. return (values[0] == values[1]);
  31. else
  32. throw new ParsingException("Unknown operator '" + c + "' detected!");
  33. }
  34. public bool IsValue(string c)
  35. {
  36. bool r;
  37. return IsValue(c, out r);
  38. }
  39. public bool IsValue(string c, out bool r)
  40. {
  41. if (c == "T" || c == "1")
  42. {
  43. r = true;
  44. return true;
  45. }
  46. else if (c == "F" || c == "0")
  47. {
  48. r = false;
  49. return true;
  50. }
  51. else
  52. {
  53. r = false;
  54. return false;
  55. }
  56. }
  57. public bool IsOperator(string c)
  58. {
  59. return
  60. (
  61. c == "!" || c == "not" || c == "&" || c == "&&" || c == "|" || c == "||" || c == ">" || c == "<->" || c == "<=>" || c == "=" || c == "xor" || c == "^" || c == "->" || c == "=>" || c == "implies"
  62. );
  63. }
  64. public int PriorityOf(string c)
  65. {
  66. if (c == "!" || c == "not")
  67. return 5;
  68. else if (c == "&" || c == "&&")
  69. return 4;
  70. else if (c == "|" || c == "||")
  71. return 3;
  72. else if (c == "^" || c == "xor")
  73. return 3;
  74. else if (c == ">" || c == "->" || c == "=>" || c == "implies")
  75. return 2;
  76. else if (c == "<->" || c == "<=>" || c == "=")
  77. return 1;
  78. else return 0;
  79. }
  80. public Associativity AssociativityOf(string c)
  81. {
  82. if (c == "!" || c == "not")
  83. return Associativity.Right;
  84. else
  85. return Associativity.Left;
  86. }
  87. public static string ToString(bool value)
  88. {
  89. return (value ? "T" : "F");
  90. }
  91. }
  92. }