boolean-expressions
Version:
Boolean expression parser and evaluator. Makes use of the Ohm grammar package with grammar rules found [here](https://github.com/avadavat/boolean-expressions/blob/master/src/grammar/grammarRules.ts).
3 lines (2 loc) • 3.8 kB
TypeScript
declare const grammarRules = "\n Truth {\n Exp\n = BiconditionalExp\n\n BiconditionalExp\n = BiconditionalExp BiconditionalOp BiconditionalExp --biconditional\n | ConverseNimplyExp\n\n BiconditionalOp\n = \"<-\" \"-\"? \">\" --double_arrow\n | \"<=\" \"=\"? \">\" --fat_double_arrow\n | \"=\" \"=\"? -- single_or_double_equals\n | caseInsensitive<\"iff \">\n | caseInsensitive<\"if and only if \">\n\n ConverseNimplyExp\n = ConverseNimplyExp ConverseNimplyOp ConverseNimplyExp --converseNimply\n | ConverseExp\n\n ConverseNimplyOp\n = \"<-/-\" --arrow\n | \"<=/=\" --fat_arrow\n\n ConverseExp\n = ConverseExp ConverseOp ConverseExp -- arrow\n | NimplyExp\n\n ConverseOp\n = \"<-\" \"-\"? --arrow\n | \"<=\" \"=\"? --fat_arrow\n\n NimplyExp\n = NimplyExp NimplyOp NimplyExp -- nimply\n | IfExp\n\n NimplyOp\n = caseInsensitive<\"nimply \"> --nimply\n | caseInsensitive<\"nimplies \"> --nimplies\n | \"-/->\" --arrow\n | \"=/=>\" --fat_arrow\n\n IfExp\n = IfExp IfOp IfExp -- arrow\n | caseInsensitive<\"if \"> IfExp caseInsensitive<\"then \"> IfExp -- ifThen\n | NorExp\n\n IfOp\n = \"->\" --arrow\n | \"-->\" --long_arrow\n | \"=>\" --fat_arrow\n | \"==>\" --long_fat_arrow\n | caseInsensitive<\"implies \"> --implies\n | caseInsensitive<\"imply \"> --imply\n\n NorExp\n = NorExp NorOp OrExp --nor\n | OrExp\n\n NorOp\n = caseInsensitive<\"nor \">\n | caseInsensitive<\"not or \">\n\n OrExp\n = OrExp OrOp XnorExp -- or\n | XnorExp\n\n OrOp\n = caseInsensitive<\"or \">\n | \"|\" \"|\"? -- single_or_double_pipe\n | \"\\\\/\"\n\n XnorExp\n = XnorExp XnorOp XorExp --xnor\n | XorExp\n\n XnorOp\n = caseInsensitive<\"xnor \">\n | caseInsensitive<\"equals \">\n | caseInsensitive<\"not xor \">\n\n XorExp\n = XorExp XorOp NandExp -- xor\n | NandExp\n\n XorOp\n = caseInsensitive<\"xor \">\n | caseInsensitive<\"not equals \">\n | \"^\"\n | \"=/=\"\n | \"!=\"\n | \"~=\"\n\n NandExp\n = NandExp NandOp AndExp -- nand\n | AndExp\n\n NandOp\n = caseInsensitive<\"nand \">\n | caseInsensitive<\"not and \">\n\n AndExp\n = AndExp AndOp PriExp -- and\n | PriExp\n\n AndOp\n = caseInsensitive<\"and \">\n | \"&\" \"&\"? --single_or_double_ampersand\n | \"/\\\\\"\n\n PriExp\n = NotExp\n | ParenExp\n | True\n | False\n | ident\n\n ParenExp\n = OpenParenOp Exp CloseParenOp\n\n OpenParenOp\n = \"(\"\n\n CloseParenOp\n = \")\"\n\n NotExp\n = NotOp PriExp\n\n NotOp\n = caseInsensitive<\"not \">\n | \"!\"\n | \"~\"\n\n True\n = caseInsensitive<\"true\">\n\n False\n = caseInsensitive<\"false\">\n\n ident (an identifier)\n = ~keyword letter alnum*\n\n keyword\n = (\n caseInsensitive<\"not\">\n | caseInsensitive<\"and\">\n | caseInsensitive<\"or\">\n | caseInsensitive<\"xor\">\n | caseInsensitive<\"if\">\n | caseInsensitive<\"then\">\n | caseInsensitive<\"only\">\n | caseInsensitive<\"iff\">\n | caseInsensitive<\"true\">\n | caseInsensitive<\"false\">\n | caseInsensitive<\"equals\">\n | caseInsensitive<\"imply\">\n | caseInsensitive<\"implies\">\n | caseInsensitive<\"nimply\">\n | caseInsensitive<\"nimplies\">\n | caseInsensitive<\"xnor\">\n | caseInsensitive<\"nand\">\n | caseInsensitive<\"nor\">\n ) ~(alnum+)\n }\n";
export default grammarRules;