;;; Code stored as: {turing}<3-lisp.problem-sets>sample-grammars.3-lisp
;;; {phylum}<3-lisp>course>problem-sets>sample-grammars.3-lisp
;;; =======================================================================
;;; Sample grammars:
(set *G*
[['s (lambda [np] (lambda [vp] ['s np vp])) 'np 'vp]
['vp (lambda [v] (lambda [np] ['vp v np])) 'v 'np]
['vp (lambda [v] ['vp v]) 'v]
['v (lambda [lex] ['v lex]) "slept"]
['v (lambda [lex] ['v lex]) "loved"]
['v (lambda [lex] ['v lex]) "wielded"]
['np (lambda [lex] ['np lex]) "arthur"]
['np (lambda [lex] ['np lex]) "gwen"]
['np (lambda [lex] ['np lex]) "excalibur"]
])
(set montague-gram
[['s (lambda [np] (lambda [vp] (pcons vp np))) 'np 'vp]
['vp (lambda [v] (lambda [np] (pcons v np))) 'v 'np]
['vp (lambda [v] v) 'v]
['v (lambda [lex] 'sleep/ ) "slept"]
['v (lambda [lex] 'love/ ) "loved"]
['v (lambda [lex] 'wield/ ) "wielded"]
['np (lambda [lex] 'arthur/ ) "arthur"]
['np (lambda [lex] 'gwen/ ) "gwen"]
['np (lambda [lex] 'excalibur/ ) "excalibur"]
])
(set 3L-description-grammar
[['expr (lambda [pair] ['expr pair])
'pair]
['expr (lambda [rail] ['expr rail])
'rail]
['expr (lambda [atom] ['expr ['atom atom]])
'identifier-expression]
['expr (lambda [numexpr] ['expr ['numeral numexpr]])
'numeral-expression]
['pair (lambda [paren]
(lambda [fun]
(lambda [args] ['pair fun (cons 'pair-args args)])))
"(" 'expr 'pair-args]
['pair-args (lambda [paren] [])
")"]
['pair-args (lambda [first]
(lambda [rest] (cons first rest)))
'expr 'pair-args]
['rail (lambda [bracket]
(lambda [elements] (cons 'rail elements)))
"[" 'rail-args]
['rail-args (lambda [bracket] [])
"]"]
['rail-args (lambda [first]
(lambda [rest] (cons first rest)))
'expr 'rail-args]])
(set 3L-recognition-grammar
[['expr id 'pair]
['expr id 'rail]
['expr id 'identifier-expression]
['pair (lambda [pren] (lambda [fun] (lambda [args] $true)))
"(" 'expr 'pair-args]
['pair-args (lambda [pren] $true) ")"]
['pair-args (lambda [first] (lambda [rest] $true))
'expr 'pair-args]
['rail (lambda [brak] (lambda [elements] $true))
"[" 'rail-args]
['rail-args (lambda [brak] $true) "]"]
['rail-args (lambda [first] (lambda [rest] $true))
'expr 'rail-args]])
(set 3L-structure-grammar
[['expr id 'pair]
['expr id 'rail]
['expr (lambda [tok] (atom-notated tok)) 'identifier-expression]
['expr (lambda [numexp]
(internalize (string-append numexp " ")))
'numeral-expression]
['pair (lambda [paren]
(lambda [fun]
(lambda [args]
(pcons fun (rcons . args)))))
"(" 'expr 'pair-args]
['pair-args (lambda [paren] [])
")"]
['pair-args (lambda [first]
(lambda [rest] (cons first rest)))
'expr 'pair-args]
['rail (lambda [bracket]
(lambda [elements] (rcons . elements)))
"[" 'rail-args]
['rail-args (lambda [bracket] []) "]"]
['rail-args (lambda [first]
(lambda [rest] (cons first rest)))
'expr 'rail-args]])
(define NORM
(lambda [exp]
(normalize exp global standard-escape id)))
(set 3L-process-grammar
[['expr id 'pair]
['expr id 'rail]
['expr
(lambda [tok] (binding (atom-notated tok) global))
'identifier-expression]
['expr
(lambda [numexp] (internalize (string-append numexp " ")))
'numeral-expression]
['pair
(lambda [paren]
(lambda [fun]
(lambda [args]
(norm (pcons fun (rcons . args))))))
"(" 'expr 'pair-args]
['pair-args
(lambda [paren] [])
")"]
['pair-args
(lambda [first]
(lambda [rest]
(cons first rest)))
'expr 'pair-args]
['rail
(lambda [bracket]
(lambda [elements]
(norm (rcons . elements))))
"[" 'rail-args]
['rail-args
(lambda [bracket] [])
"]"]
['rail-args
(lambda [first]
(lambda [rest]
(cons first rest)))
'expr 'rail-args]])