Skip to content

Instantly share code, notes, and snippets.

@ka9e
Last active January 23, 2016 02:14
Show Gist options
  • Save ka9e/e8b7fda7536d389043e8 to your computer and use it in GitHub Desktop.
Save ka9e/e8b7fda7536d389043e8 to your computer and use it in GitHub Desktop.
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]*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment