Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var sampleSEXP1 = 'Kevin';
- var expectedSEXP1 = "Kevin";
- var sampleSEXP2 = '(Kevin A B C)';
- var expectedSEXP2 = ["Kevin", "A", "B", "C"];
- var sampleSEXP3 = '(Kevin (A B C) B C)';
- var expectedSEXP3 = ["Kevin", ["A", "B", "C"], "B", "C"];
- var sampleSEXP4 = '(Kevin)';
- var expectedSEXP4 = ["Kevin"];
- var sampleSEXP7 = '(a (a b c) (d e f (g h)) z)';
- var expectedSEXP7 = ["a", ["a", "b", "c"], ["d", "e", "f", ["g", "h"]], "z"];
- var sampleSEXP8 = '()';
- var expectedSEXP8 = [];
- var NORMAL = 0;
- var STRING = 1;
- function parseSEXP(s) {
- if (s) {
- if (s[0] == "(") { // Do some parsing
- var depth = 0;
- var cur = "";
- var out = [];
- for (var i = 1; i < s.length - 1; i++) {
- if (s[i] == "(") {
- depth++;
- cur += s[i];
- } else if (s[i] == ")") {
- depth--;
- cur += s[i];
- if (depth == 0) {
- if (cur) {
- out.push(parseSEXP(cur));
- }
- cur = "";
- }
- } else if (depth > 0) {
- cur += s[i];
- } else if (s[i] == " ") {
- if (cur) {
- out.push(parseSEXP(cur));
- }
- cur = "";
- } else {
- cur += s[i];
- }
- }
- if (cur) {
- out.push(parseSEXP(cur));
- }
- return out;
- } else {
- return s.replace(/_/g, " ");
- }
- } else {
- return "";
- }
- }
- function tokenize(psexp){
- if (Array.isArray(psexp)) {
- if (psexp.length == 0) {
- return false;
- } else {
- return {
- "OP" : psexp[0],
- "ARGS" : psexp.slice(1).map(tokenize)
- }
- }
- } else {
- return psexp;
- }
- }
- function isValidServerRequest(tsexp) {
- if (typeof tsexp == "string") {
- return true;
- } else if (tsexp.OP == "OR") {
- return (tsexp.ARGS.length > 1) && tsexp.ARGS.reduce(function(acc, e){return acc&&isValidServerRequest(e)}, true);
- } else if (tsexp.OP == "AND") {
- return (tsexp.ARGS.length > 1) && tsexp.ARGS.reduce(function(acc, e){return acc&&isValidServerRequest(e)}, true);
- } else if (tsexp.OP == "NOT") {
- return (tsexp.ARGS.length == 1) && isValidServerRequest(tsexp.ARGS[0]);
- } else {
- return false;
- }
- }
- function checkExpect(a, b) {
- if (a.toString() != b.toString()) {
- console.error("Check expect failed. Actual:", a, " Expected:", b);
- } else {
- console.log("Check expect passed. Actual:", a, " Expected:", b);
- }
- }
- checkExpect(parseSEXP(sampleSEXP1), expectedSEXP1);
- checkExpect(parseSEXP(sampleSEXP2), expectedSEXP2);
- checkExpect(parseSEXP(sampleSEXP3), expectedSEXP3);
- checkExpect(parseSEXP(sampleSEXP4), expectedSEXP4);
- checkExpect(parseSEXP(sampleSEXP7), expectedSEXP7);
- checkExpect(parseSEXP(sampleSEXP8), expectedSEXP8);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement