Showing content from http://norvig.com/sciam/cpl.g below:
def convert(x, table={'=':'==', '∨':'|', '∧':'&', ':=':'='}): if x in table: return table[x] if x.startswith('&') and x.endswith(';'): return x[1:-1] return x %% parser cpl: ignore: '\\s+|#.*' token NUM: '[0-9]+' token ID: '[a-z]|[A-Z][a-zA-Z0-9_]*|&(theta|psi|Phi|sigma|infin);' token OP: '[-+*/=><]|∨|∧' token UNARY: '[-+~]' token RARR: '→' token SECT: '§' token STR: '"([^\\"]+|\\\\.)*"' rule program: {{defs = []}} (ID arglist "=" expr {{defs.append("def " + ID + arglist + ":\n return " + expr)}})+ '//EOF' {{return '\n'.join(defs)}} rule expr: "value" "of" SECT expr SECT {{return expr}} | "result" "is" expr {{return expr}} | "let" lhs "=" expr {{e1 = expr}} expr {{return '(lambda %s=%s:\n %s)()' % (lhs, e1, expr)}} | "if" expr {{e1 = expr}} "then" expr {{e2 = expr}} expr {{return e2 + " if " + e1 + " else " + expr}} | UNARY expr {{return UNARY + expr}} | factor (OP expr {{factor += convert(OP) + expr}})* [RARR expr {{e2 = expr}} "," expr {{return '('+e2+' if '+factor+' else '+expr+')'}}] {{return factor}} rule lhs: ID {{return convert(ID)}} | arglist {{return arglist}} rule factor: STR {{return repr(STR)}} | NUM {{return convert(NUM)}} | ID {{id = convert(ID)}} ( ID {{id += '*' + convert(ID)}} )* ## implicit multiplication [arglist {{id += arglist}}] ## function call {{return id}} | arglist {{return arglist}} rule arglist: "[(]" {{e = []}} ( expr {{e.append(expr)}} [","])* "[)]" {{return "(" + ', '.join(e) + ")"}}
RetroSearch is an open source project built by @garambo
| Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4