ka9e
1/23/2016 - 1:12 AM

propositional logic syntax(written for PEG.js); try it on http://pegjs.org/online

propositional logic syntax(written for PEG.js); try it on http://pegjs.org/online

EXPR
=
  lhs:TERM remains:(_ BINARY _ TERM)*
  {
      var result = lhs;

      for (var x of remains)
          result = x[1](result, x[3]);

      return result;
  }
  /
  t:TERM
  {
      return t;
  }

TERM
=
  "(" _ e:EXPR _ ")"
  {
      return e;
  }
  / 
  n:UNARY _ t:TERM
  {
      return [n, t];
  }
  /
  a:ATOM
  {
      return a;
  }

ATOM "atom"
= ["PQRSTU"]
  / c:CONST
  {
      return c;
  }

BINARY
= op:AND
  { return function(l,r){ return l && r; }; }
  /
  op:OR
  { return function(l,r){ return l || r; }; }

UNARY = NOT

NOT
= "¬" / "not"
AND
= "∧" / "and"
OR
= "∨" / "or"

CONST
= "true"
  { return true; }
/ "false"
  { return false; }

_ "whitespace"
  = [ \t\n\r]*