Below is a BNF style grammar for lambda Prolog as implemented in Terzo. Please send questions, comments, or corrections to Philip Wickline . module ::= module_decl preamble module_body module_decl ::= MODULE MODULE_NAME PERIOD preamble ::= | IMPORT module_name_list PERIOD preamble | ACCUMULATE module_name_list PERIOD preamble module_name_list::= MODULE_NAME | MODULE_NAME COMMA module_name_list module_body ::= | term PERIOD module_body | sign_decl PERIOD module_body | fixity_decl PERIOD module_body sign_decl ::= TYPE idlist type | LOCAL idlist type | KIND idlist kind | LOCALKIND idlist kind fixity_decl ::= INFIXL idlist INT | INFIXR idlist INT | INFIX idlist INT | PREFIX idlist INT | POSTFIX idlist INT idlist ::= lcid | lcid COMMA idlist term ::= term term | term INFIX_OP term | LPAREN term RPAREN | term has_type | atom atom ::= identifier (* Built in constants *) | INT | REAL | STRING | ANONYMOUS (* Abstraction *) | identifier BACKSLASH term identifier ::= id | id has_type | LPAREN identifier RPAREN id ::= UCID | lcid has_type ::= COLON type lcid ::= QUID | LCID type ::= type ARROW type | type type | LPAREN type RPAREN | type_atom type_atom ::= lcid | UCID (* built in types *) | INTTYPE | REALTYPE | STRINGTYPE | INSTREAMTYPE | OUTSTREAMTYPE kind ::= TYPE | TYPE ARROW kind