Advertisement
Guest User

Untitled

a guest
May 4th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. var sampleSEXP1 = 'Kevin';
  2. var expectedSEXP1 = "Kevin";
  3. var sampleSEXP2 = '(Kevin A B C)';
  4. var expectedSEXP2 = ["Kevin", "A", "B", "C"];
  5. var sampleSEXP3 = '(Kevin (A B C) B C)';
  6. var expectedSEXP3 = ["Kevin", ["A", "B", "C"], "B", "C"];
  7. var sampleSEXP4 = '(Kevin)';
  8. var expectedSEXP4 = ["Kevin"];
  9. var sampleSEXP7 = '(a (a b c) (d e f (g h)) z)';
  10. var expectedSEXP7 = ["a", ["a", "b", "c"], ["d", "e", "f", ["g", "h"]], "z"];
  11. var sampleSEXP8 = '()';
  12. var expectedSEXP8 = [];
  13.  
  14. var NORMAL = 0;
  15. var STRING = 1;
  16.  
  17. function parseSEXP(s) {
  18. if (s) {
  19. if (s[0] == "(") { // Do some parsing
  20. var depth = 0;
  21. var cur = "";
  22. var out = [];
  23. for (var i = 1; i < s.length - 1; i++) {
  24. if (s[i] == "(") {
  25. depth++;
  26. cur += s[i];
  27. } else if (s[i] == ")") {
  28. depth--;
  29. cur += s[i];
  30. if (depth == 0) {
  31. if (cur) {
  32. out.push(parseSEXP(cur));
  33. }
  34. cur = "";
  35. }
  36. } else if (depth > 0) {
  37. cur += s[i];
  38. } else if (s[i] == " ") {
  39. if (cur) {
  40. out.push(parseSEXP(cur));
  41. }
  42. cur = "";
  43. } else {
  44. cur += s[i];
  45. }
  46. }
  47. if (cur) {
  48. out.push(parseSEXP(cur));
  49. }
  50. return out;
  51. } else {
  52. return s.replace(/_/g, " ");
  53. }
  54. } else {
  55. return "";
  56. }
  57. }
  58.  
  59. function tokenize(psexp){
  60. if (Array.isArray(psexp)) {
  61. if (psexp.length == 0) {
  62. return false;
  63. } else {
  64. return {
  65. "OP" : psexp[0],
  66. "ARGS" : psexp.slice(1).map(tokenize)
  67. }
  68. }
  69. } else {
  70. return psexp;
  71. }
  72. }
  73.  
  74. function isValidServerRequest(tsexp) {
  75. if (typeof tsexp == "string") {
  76. return true;
  77. } else if (tsexp.OP == "OR") {
  78. return (tsexp.ARGS.length > 1) && tsexp.ARGS.reduce(function(acc, e){return acc&&isValidServerRequest(e)}, true);
  79. } else if (tsexp.OP == "AND") {
  80. return (tsexp.ARGS.length > 1) && tsexp.ARGS.reduce(function(acc, e){return acc&&isValidServerRequest(e)}, true);
  81.  
  82. } else if (tsexp.OP == "NOT") {
  83. return (tsexp.ARGS.length == 1) && isValidServerRequest(tsexp.ARGS[0]);
  84. } else {
  85. return false;
  86. }
  87. }
  88.  
  89. function checkExpect(a, b) {
  90. if (a.toString() != b.toString()) {
  91. console.error("Check expect failed. Actual:", a, " Expected:", b);
  92. } else {
  93. console.log("Check expect passed. Actual:", a, " Expected:", b);
  94. }
  95. }
  96.  
  97. checkExpect(parseSEXP(sampleSEXP1), expectedSEXP1);
  98. checkExpect(parseSEXP(sampleSEXP2), expectedSEXP2);
  99. checkExpect(parseSEXP(sampleSEXP3), expectedSEXP3);
  100. checkExpect(parseSEXP(sampleSEXP4), expectedSEXP4);
  101. checkExpect(parseSEXP(sampleSEXP7), expectedSEXP7);
  102. checkExpect(parseSEXP(sampleSEXP8), expectedSEXP8);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement