diff --git a/src/canvas/StepMenu.js b/src/canvas/StepMenu.js index 116f9fe..2ac17d6 100644 --- a/src/canvas/StepMenu.js +++ b/src/canvas/StepMenu.js @@ -9,6 +9,7 @@ class StepMenu extends React.Component { this.performUndo = this.performUndo.bind(this); this.state = {}; } + handleClick(event, step, disabled) { event.preventDefault(); if (!disabled) { diff --git a/src/converters.js b/src/converters.js index 8193125..710f7e9 100644 --- a/src/converters.js +++ b/src/converters.js @@ -81,6 +81,8 @@ const stripUnary = (s, convertStatement) => { if (convertStatement == null) convertStatement = true; let c = countUnary(s); + console.log(c) + console.log(s) let statement = s.substr(c) if (convertStatement) statement = convertToEG(statement) else statement = '{' + statement + '}' @@ -92,27 +94,31 @@ const stripUnary = (s, convertStatement) => { * @return {string} EG-style sentence notation. */ const convertToEG = (formula) => { + if (!verifySentence(formula)) return null; if ((typeof formula === 'string' || formula instanceof String) && verifySentence(formula)) { // filter out spaces formula = formula.replace(/\s/g, '') let binary = binaryRegex.exec(formula) let parenthesis = parenthesisRegex.exec(formula) - let unary = atomicRegex.exec(formula) + let atom = atomicRegex.exec(formula) if (binary) { let left = convertToEG(binary[1]) let right = convertToEG(binary[4]) let symConversion = operators.eg[binary[3]]; return symConversion.replace(/\$1/g, left).replace(/\$2/g, right) - } else if (parenthesis) { - if (countUnary(formula) !== 0) { - return stripUnary(formula.substr(1,formula.length-2), true); - } - return convertToEG(parenthesis[1]); - } else if (unary) { - return stripUnary(formula, false); - } else return null; - } - else return null; + } else if (formula[0] === '(') { + let res = convertToEG(formula.substr(1,formula.length-2)); + if (res) return res; + else return null; + } else if (Object.keys(unaryOperators).includes(formula[0])) { + let res = convertToEG(formula.substr(1)) + if (res) return '(' + res + ')'; + else return null; + } else if (atom) { + return '{' + atom[0] + '}' + } + return null; + } else return null; } /** diff --git a/src/operators.json b/src/operators.json index 0dd5ec0..ec5b7ba 100644 --- a/src/operators.json +++ b/src/operators.json @@ -12,6 +12,9 @@ "~": "\\lnot", "!": "\\lnot" }, + "symb": { + "^": "\\bot" + }, "eg": { "<->": "($1($2))(($1)$2)", "%": "($1($2))(($1)$2)", diff --git a/src/verifySentence.js b/src/verifySentence.js index 5f98383..467dc60 100644 --- a/src/verifySentence.js +++ b/src/verifySentence.js @@ -20,10 +20,11 @@ function arrToRegex(arr) { const uReg = arrToRegex(Object.keys(unary)); const regexStr = `^(${uReg}*[A-Za-z]+|${uReg}*\\((.*)\\))(${arrToRegex(Object.keys(binary))})(${uReg}*[A-Za-z]+|${uReg}*\\((.*)\\))$` let binaryRegex = new RegExp(regexStr) // eslint-disable-line -let atomicRegex = new RegExp(`^${uReg}*[A-Za-z]+$`) +let atomicRegex = new RegExp(`^([A-Za-z])*`) let parenthesisRegex = new RegExp(`^${uReg}*\\((.*)\\)$`) function verifyRecursive(sentence) { + console.log(sentence) let res if (sentence.match(atomicRegex)) return true; else if ((res = binaryRegex.exec(sentence)) !== null) {