1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
;
; this grammer recognises klisp profile output
;
(
(profile-file (opt-whites opt-header opt-profiles)
)
(opt-header (name name name)
()
)
(opt-whites (whites)
()
)
(opt-profiles (profile opt-profiles)
()
)
(profile (number profile-p)
)
(profile-p (callee)
(caller)
)
(callee (number class name)
)
(caller (name)
)
;
; the rest of the grammar is actually the lexer
;
(class (|U| whites)
(|B| whites)
)
(number ("CLEAR" digits "PUSH" whites)
)
(name ("START-NAME" letters "END-NAME" whites)
)
(digits ("ADD-DIGIT" digit more-digits)
)
(more-digits ("ADD-DIGIT" digit more-digits)
()
)
(digit (|0|) (|1|) (|2|) (|3|) (|4|) (|5|) (|6|) (|7|) (|8|) (|9|)
)
(letters ("ADD-LETTER" letter more-letters)
)
(more-letters ("ADD-LETTER" letter more-letters)
()
)
(whites (white more-whites)
)
(more-whites (white more-whites)
()
)
(white (| |) (|\n|)
)
(letter
(|!|) (|"|) (|#|) (|%|) (|&|) (|'|)
(|(|) (|)|) (|*|) (|+|) (|,|) (|-|) (|.|) (|/|)
(|:|) (|;|) (|<|) (|=|) (|>|) (|?|)
(|@|) (|A|) (|B|) (|C|) (|D|) (|E|) (|F|) (|G|)
(|H|) (|I|) (|J|) (|K|) (|L|) (|M|) (|N|) (|O|)
(|P|) (|Q|) (|R|) (|S|) (|T|) (|U|) (|V|) (|W|)
(|X|) (|Y|) (|Z|) (|[|) (|\\|) (|]|) (|^|) (|_|)
(|`|) (|a|) (|b|) (|c|) (|d|) (|e|) (|f|) (|g|)
(|h|) (|i|) (|j|) (|k|) (|l|) (|m|) (|n|) (|o|)
(|p|) (|q|) (|r|) (|s|) (|t|) (|u|) (|v|) (|w|)
(|x|) (|y|) (|z|) (|{|) (|\||) (|}|) (|~|) (|\177|)
)
)
|