; This is the test file for generating strings from context free grammars ; for Assignment 3, CS 152, Fall 2003 (load "grammar.scm") ; You can uncomment this line out to enable tracing ; (require (lib "trace.ss")) ; This is a grammar for a fragment of English ; The rules are: ; S -> NP VP ; NP -> Det N | Det N PP ; PP -> P NP ; VP -> V | V NP | V PP | V N PP ; ; Note that the lexical categories P, V, N, and Det ; are treated as terminal symbols (define g (make-grammar 's '(np vp pp) (list (make-rule 's '(np vp)) (make-rule 'np '(det n)) (make-rule 'np '(np pp)) (make-rule 'pp '(p np)) (make-rule 'vp '(v)) (make-rule 'vp '(v np)) (make-rule 'vp '(v pp)) (make-rule 'vp '(v np pp))))) ; This is a simple grammar with rules ; S -> x | x S S (define g1 (make-grammar 's '() (list (make-rule 's '(x s s)) (make-rule 's '(x))))) ; This is a grammar for simple algebraic expressions. ; Its rules are ; E -> T | T + E ; T -> F | F * T ; F -> x | y | < E > (define g2 (make-grammar 'e '(t f) (list (make-rule 'e '(t)) (make-rule 'e '(t + e)) (make-rule 't '(f)) (make-rule 't '(f * t)) (make-rule 'f '(x)) (make-rule 'f '(y)) (make-rule 'f '(< e >)) ))) (define (test) (display (get-yields 's g 3)) (newline) (display (get-yields 's g 4)) (newline) (display (get-yields 's g 5)) (newline) (display (get-yields 's g 6)) (newline) (display (get-yields 's g 7)) (newline) (display (get-yields 'vp g 6)) (newline) (display (get-yields 's g 8)) (newline) (display (get-yields 's g1 3)) (newline) (display (get-yields 's g1 5)) (newline) (display (get-yields 's g1 6)) (newline) (display (get-yields 's g1 7)) (newline) (display (get-yields 'vp g1 6)) (newline) (display (get-yields 's g1 -6)) (newline) (display (get-yields g g1 6)) (newline) (display (get-yields 's 'e -6)) (newline) (display (get-yields 'e g2 1)) (newline) (display (get-yields 'e g2 3)) (newline) (display (get-yields 'e g2 4)) (newline) (display (get-yields 'e g2 5)) (newline) (display (length (get-yields 'e g2 5))) (newline) )