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]*