Author: ctian Date: Sat Sep 15 17:13:11 2007 New Revision: 37
Added: trunk/asn.1/asn.1-domain.lisp trunk/asn.1/asn.1.tab trunk/asn.1/test/2.asn Modified: trunk/asn.1/asn.1.zb trunk/asn.1/ber.lisp trunk/asn.1/mib.lisp trunk/asn.1/oid.lisp trunk/asn.1/package.lisp trunk/asn.1/stream-test.lisp trunk/asn.1/test/1.asn Log: First release which can parse RFC1155
Added: trunk/asn.1/asn.1-domain.lisp ============================================================================== --- (empty file) +++ trunk/asn.1/asn.1-domain.lisp Sat Sep 15 17:13:11 2007 @@ -0,0 +1,354 @@ +;;; This file was generated by Zebu (Version 3.5.5) + +(IN-PACKAGE "ASN.1") +(REQUIRE "zebu-package") +(USE-PACKAGE "ZEBU") + +(DEFSTRUCT (OBJ-ID-COMPONENTS-LIST + (:INCLUDE KB-DOMAIN) + (:PRINT-FUNCTION + (LAMBDA + (ITEM STREAM LEVEL &AUX + (%R (OBJ-ID-COMPONENTS-LIST--LIST ITEM))) + (DECLARE (IGNORE LEVEL)) + (FORMAT STREAM + "~a" + (LET ((OBJ-ID-COMPONENTS+ %R)) + (IF (NULL OBJ-ID-COMPONENTS+) + "" + (ZEBU::KB-SEQUENCE-PRINT OBJ-ID-COMPONENTS+ + NIL + NIL))))))) + (-LIST NIL :TYPE (OR NULL KB-SEQUENCE))) + +(DEFSTRUCT (ASSIGNMENT-LIST + (:INCLUDE KB-DOMAIN) + (:PRINT-FUNCTION + (LAMBDA + (ITEM STREAM LEVEL &AUX + (%R (ASSIGNMENT-LIST--LIST ITEM))) + (DECLARE (IGNORE LEVEL)) + (FORMAT STREAM + "~a" + (LET ((ASSIGNMENT+ %R)) + (IF (NULL ASSIGNMENT+) + "" + (ZEBU::KB-SEQUENCE-PRINT ASSIGNMENT+ + NIL + NIL))))))) + (-LIST NIL :TYPE (OR NULL KB-SEQUENCE))) + +(DEFSTRUCT (ASSIGNMENT + (:INCLUDE KB-DOMAIN) + (:PRINT-FUNCTION + (LAMBDA + (ITEM STREAM LEVEL &AUX (%R (ASSIGNMENT--VALUE ITEM))) + (DECLARE (IGNORE LEVEL)) + (FORMAT STREAM + "~a" + (LET ((SPECIAL-ASSIGNMENT %R)) + (ZEBU::KB-SEQUENCE-PRINT SPECIAL-ASSIGNMENT + NIL + NIL)))))) + -TYPE + -VALUE) + +(DEFSTRUCT (MODULE-BODY + (:INCLUDE KB-DOMAIN) + (:PRINT-FUNCTION + (LAMBDA + (ITEM STREAM LEVEL &AUX (%R ITEM) + (%S (MODULE-BODY--ASSIGNMENT-LIST ITEM))) + (DECLARE (IGNORE LEVEL)) + (FORMAT STREAM + "~a ~a ~a" + (LET ((EXPORTS NIL)) + (ZEBU::KB-SEQUENCE-PRINT EXPORTS NIL NIL)) + NIL + %S)))) + -ASSIGNMENT-LIST) + +(DEFSTRUCT (MODULE-DEFINITION + (:INCLUDE KB-DOMAIN) + (:PRINT-FUNCTION + (LAMBDA + (ITEM STREAM LEVEL &AUX + (%R (MODULE-DEFINITION--IDENTIFIER ITEM)) + (%S (MODULE-DEFINITION--BODY ITEM))) + (DECLARE (IGNORE LEVEL)) + (FORMAT STREAM "~a DEFINITIONS::=BEGIN ~a END" %R %S)))) + -IDENTIFIER + -BODY) + +(DEFUN SYMBOL+,1$234 (SYMBOL) (MAKE-KB-SEQUENCE :FIRST SYMBOL)) + +(DEFUN SYMBOL+,1$235 (SYMBOL DUMMY SYMBOL+,1$) + (DECLARE (IGNORE DUMMY)) + (MAKE-KB-SEQUENCE :FIRST SYMBOL :REST SYMBOL+,1$)) + +(DEFUN ASSIGNMENT+236 (ASSIGNMENT) (MAKE-KB-SEQUENCE :FIRST ASSIGNMENT)) + +(DEFUN ASSIGNMENT+237 (ASSIGNMENT ASSIGNMENT+) + (MAKE-KB-SEQUENCE :FIRST ASSIGNMENT :REST ASSIGNMENT+)) + +(DEFUN OBJ-ID-COMPONENTS+238 (OBJ-ID-COMPONENTS) + (MAKE-KB-SEQUENCE :FIRST OBJ-ID-COMPONENTS)) + +(DEFUN OBJ-ID-COMPONENTS+239 (OBJ-ID-COMPONENTS OBJ-ID-COMPONENTS+) + (MAKE-KB-SEQUENCE :FIRST OBJ-ID-COMPONENTS :REST OBJ-ID-COMPONENTS+)) + +(DEFUN GARBAGE+240 (GARBAGE) (MAKE-KB-SEQUENCE :FIRST GARBAGE)) + +(DEFUN GARBAGE+241 (GARBAGE GARBAGE+) + (MAKE-KB-SEQUENCE :FIRST GARBAGE :REST GARBAGE+)) + +(DEFUN OBJ-ID-COMPONENTS-LIST242 (OBJ-ID-COMPONENTS+) + (MAKE-OBJ-ID-COMPONENTS-LIST :-LIST OBJ-ID-COMPONENTS+)) + +(DEFUN ASSIGNMENT243 (SPECIAL-ASSIGNMENT) + (MAKE-ASSIGNMENT :-TYPE :SPECIAL :-VALUE SPECIAL-ASSIGNMENT)) + +(DEFUN ASSIGNMENT244 (TYPE-ASSIGNMENT) + (MAKE-ASSIGNMENT :-TYPE :TYPE :-VALUE TYPE-ASSIGNMENT)) + +(DEFUN ASSIGNMENT245 (VALUE-ASSIGNMENT) + (MAKE-ASSIGNMENT :-TYPE :VALUE :-VALUE VALUE-ASSIGNMENT)) + +(DEFUN ASSIGNMENT-LIST246 (ASSIGNMENT+) + (MAKE-ASSIGNMENT-LIST :-LIST ASSIGNMENT+)) + +(DEFUN MODULE-BODY247 (EXPORTS IMPORTS ASSIGNMENT-LIST) + (MAKE-MODULE-BODY :-ASSIGNMENT-LIST ASSIGNMENT-LIST)) + +(DEFUN MODULE-DEFINITION248 + (MODULE-IDENTIFIER DUMMY DUMMY1 DUMMY2 MODULE-BODY DUMMY3) + (DECLARE (IGNORE DUMMY3 DUMMY2 DUMMY1 DUMMY)) + (MAKE-MODULE-DEFINITION :-IDENTIFIER + MODULE-IDENTIFIER + :-BODY + MODULE-BODY)) + + +(EVAL-WHEN (COMPILE) + (UNLESS (MEMBER "zebu-regex" *MODULES* :TEST #'EQUAL) + (WARN "Load the Zebu Compiler!"))) +(DECLAIM (SPECIAL ZEBU::*REGEX-GROUPS* ZEBU::*REGEX-GROUPINGS*)) +(DEFUN A-NUMBER + (STRING &OPTIONAL (ZEBU::START 0) (ZEBU::END (LENGTH STRING))) + (WHEN (PROGN + (SETF ZEBU::*REGEX-GROUPINGS* 1) + (BLOCK ZEBU::FINAL-RETURN + (BLOCK ZEBU::COMPARE + (LET ((ZEBU::INDEX ZEBU::START) (LENGTH ZEBU::END)) + (SETF (SVREF ZEBU::*REGEX-GROUPS* 0) + (LIST ZEBU::INDEX NIL)) + (LET ((ZEBU::OINDEX ZEBU::INDEX)) + (BLOCK ZEBU::COMPARE + (DO () + (NIL) + (LET ((ZEBU::RANGE + #*0000000000000000000000000000000000000000000000001111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT + ZEBU::RANGE + (CHAR-CODE (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))))) + (DO ((ZEBU::START ZEBU::INDEX (1- ZEBU::START))) + ((< ZEBU::START ZEBU::OINDEX) NIL) + (LET ((ZEBU::INDEX ZEBU::START)) + (BLOCK ZEBU::COMPARE + (LET ((ZEBU::RANGE + #*0000000000000000000000000000000000000000000000001111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT + ZEBU::RANGE + (CHAR-CODE + (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))) + (SETF (CADR (SVREF ZEBU::*REGEX-GROUPS* 0)) + ZEBU::INDEX) + (RETURN-FROM ZEBU::FINAL-RETURN T))))))))) + (SECOND (SVREF ZEBU::*REGEX-GROUPS* 0)))) + +(DEFUN VALUE-REFERENCE + (STRING &OPTIONAL (ZEBU::START 0) (ZEBU::END (LENGTH STRING))) + (WHEN (PROGN + (SETF ZEBU::*REGEX-GROUPINGS* 1) + (BLOCK ZEBU::FINAL-RETURN + (BLOCK ZEBU::COMPARE + (LET ((ZEBU::INDEX ZEBU::START) (LENGTH ZEBU::END)) + (SETF (SVREF ZEBU::*REGEX-GROUPS* 0) + (LIST ZEBU::INDEX NIL)) + (LET ((ZEBU::RANGE + #*0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT ZEBU::RANGE + (CHAR-CODE (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))) + (LET ((ZEBU::OINDEX ZEBU::INDEX)) + (BLOCK ZEBU::COMPARE + (DO () + (NIL) + (LET ((ZEBU::RANGE + #*0000000000000000000000000000000000000000000001001111111111000000011111111111111111111111111000000111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT + ZEBU::RANGE + (CHAR-CODE (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))))) + (DO ((ZEBU::START ZEBU::INDEX (1- ZEBU::START))) + ((< ZEBU::START ZEBU::OINDEX) NIL) + (LET ((ZEBU::INDEX ZEBU::START)) + (BLOCK ZEBU::COMPARE + (LET ((ZEBU::RANGE + #*0000000000000000000000000000000000000000000001001111111111000000011111111111111111111111111000000111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT + ZEBU::RANGE + (CHAR-CODE + (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))) + (SETF (CADR (SVREF ZEBU::*REGEX-GROUPS* 0)) + ZEBU::INDEX) + (RETURN-FROM ZEBU::FINAL-RETURN T))))))))) + (SECOND (SVREF ZEBU::*REGEX-GROUPS* 0)))) + +(DEFUN TYPE-REFERENCE + (STRING &OPTIONAL (ZEBU::START 0) (ZEBU::END (LENGTH STRING))) + (WHEN (PROGN + (SETF ZEBU::*REGEX-GROUPINGS* 1) + (BLOCK ZEBU::FINAL-RETURN + (BLOCK ZEBU::COMPARE + (LET ((ZEBU::INDEX ZEBU::START) (LENGTH ZEBU::END)) + (SETF (SVREF ZEBU::*REGEX-GROUPS* 0) + (LIST ZEBU::INDEX NIL)) + (LET ((ZEBU::RANGE + #*0000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT ZEBU::RANGE + (CHAR-CODE (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))) + (LET ((ZEBU::OINDEX ZEBU::INDEX)) + (BLOCK ZEBU::COMPARE + (DO () + (NIL) + (LET ((ZEBU::RANGE + #*0000000000000000000000000000000000000000000001001111111111000000011111111111111111111111111000000111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT + ZEBU::RANGE + (CHAR-CODE (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))))) + (DO ((ZEBU::START ZEBU::INDEX (1- ZEBU::START))) + ((< ZEBU::START ZEBU::OINDEX) NIL) + (LET ((ZEBU::INDEX ZEBU::START)) + (BLOCK ZEBU::COMPARE + (SETF (CADR (SVREF ZEBU::*REGEX-GROUPS* 0)) + ZEBU::INDEX) + (RETURN-FROM ZEBU::FINAL-RETURN T))))))))) + (SECOND (SVREF ZEBU::*REGEX-GROUPS* 0)))) + +(DEFUN MODULE-REFERENCE + (STRING &OPTIONAL (ZEBU::START 0) (ZEBU::END (LENGTH STRING))) + (WHEN (PROGN + (SETF ZEBU::*REGEX-GROUPINGS* 1) + (BLOCK ZEBU::FINAL-RETURN + (BLOCK ZEBU::COMPARE + (LET ((ZEBU::INDEX ZEBU::START) (LENGTH ZEBU::END)) + (SETF (SVREF ZEBU::*REGEX-GROUPS* 0) + (LIST ZEBU::INDEX NIL)) + (LET ((ZEBU::RANGE + #*0000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT ZEBU::RANGE + (CHAR-CODE (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))) + (LET ((ZEBU::OINDEX ZEBU::INDEX)) + (BLOCK ZEBU::COMPARE + (DO () + (NIL) + (LET ((ZEBU::RANGE + #*0000000000000000000000000000000000000000000001001111111111000000011111111111111111111111111000000111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT + ZEBU::RANGE + (CHAR-CODE (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))))) + (DO ((ZEBU::START ZEBU::INDEX (1- ZEBU::START))) + ((< ZEBU::START ZEBU::OINDEX) NIL) + (LET ((ZEBU::INDEX ZEBU::START)) + (BLOCK ZEBU::COMPARE + (SETF (CADR (SVREF ZEBU::*REGEX-GROUPS* 0)) + ZEBU::INDEX) + (RETURN-FROM ZEBU::FINAL-RETURN T))))))))) + (SECOND (SVREF ZEBU::*REGEX-GROUPS* 0)))) + +(DEFUN ANY-THING + (STRING &OPTIONAL (ZEBU::START 0) (ZEBU::END (LENGTH STRING))) + (WHEN (PROGN + (SETF ZEBU::*REGEX-GROUPINGS* 1) + (BLOCK ZEBU::FINAL-RETURN + (BLOCK ZEBU::COMPARE + (LET ((ZEBU::INDEX ZEBU::START) (LENGTH ZEBU::END)) + (SETF (SVREF ZEBU::*REGEX-GROUPS* 0) + (LIST ZEBU::INDEX NIL)) + (LET ((ZEBU::OINDEX ZEBU::INDEX)) + (BLOCK ZEBU::COMPARE + (DO () + (NIL) + (LET ((ZEBU::RANGE + #*1111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT + ZEBU::RANGE + (CHAR-CODE (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))))) + (DO ((ZEBU::START ZEBU::INDEX (1- ZEBU::START))) + ((< ZEBU::START ZEBU::OINDEX) NIL) + (LET ((ZEBU::INDEX ZEBU::START)) + (BLOCK ZEBU::COMPARE + (LET ((ZEBU::RANGE + #*1111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111)) + (IF (>= ZEBU::INDEX LENGTH) + (RETURN-FROM ZEBU::COMPARE NIL)) + (IF (= 1 + (SBIT + ZEBU::RANGE + (CHAR-CODE + (CHAR STRING ZEBU::INDEX)))) + (INCF ZEBU::INDEX) + (RETURN-FROM ZEBU::COMPARE NIL))) + (SETF (CADR (SVREF ZEBU::*REGEX-GROUPS* 0)) + ZEBU::INDEX) + (RETURN-FROM ZEBU::FINAL-RETURN T))))))))) + (SECOND (SVREF ZEBU::*REGEX-GROUPS* 0))))
Added: trunk/asn.1/asn.1.tab ============================================================================== --- (empty file) +++ trunk/asn.1/asn.1.tab Sat Sep 15 17:13:11 2007 @@ -0,0 +1,262 @@ + +(:FILE "/home/binghe/cl-net-snmp/asn.1/asn.1.zb" :NAME "ASN.1" :DOMAIN-FILE "asn.1-domain.lisp" :PACKAGE "ASN.1" :GRAMMAR "zebu-mg" :IDENTIFIER-START-CHARS "abcdefghijklmnopqrstuvwxyz" :IDENTIFIER-CONTINUE-CHARS "-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" :LEX-CATS ((A-NUMBER "[0-9]+") (VALUE-REFERENCE "[a-z][a-zA-Z0-9-]+") (TYPE-REFERENCE "[A-Z][a-zA-Z0-9-]*") (MODULE-REFERENCE "[A-Z][a-zA-Z0-9-]*") (ANY-THING "[^ ]+")) :DOMAIN (KB-DOMAIN :SUBTYPE (OBJ-ID-COMPONENTS-LIST :SLOTS ((-LIST KB-SEQUENCE))) :SUBTYPE (ASSIGNMENT-LIST :SLOTS ((-LIST KB-SEQUENCE))) :SUBTYPE (ASSIGNMENT :SLOTS (-TYPE -VALUE)) :SUBTYPE (MODULE-BODY :SLOTS (-ASSIGNMENT-LIST)) :SUBTYPE (MODULE-DEFINITION :SLOTS (-IDENTIFIER -BODY))) :DOMAIN-FILE "/home/binghe/cl-net-snmp/asn.1/asn.1-domain.lisp") +#75(ZEBU::THE-EMPTY-STRING ZEBU::AUGMENTED-START ZEBU::THE-END-G-SYMBOL MODULE-DEFINITION MODULE-IDENTIFIER "DEFINITIONS" "::=" "BEGIN" MODULE-BODY "END" MODULE-REFERENCE EXPORTS IMPORTS ASSIGNMENT-LIST "EXPORTS" SYMBOLS-EXPORTED ";" "ALL" SYMBOL+,1$ SYMBOL REFERENCE TYPE-REFERENCE VALUE-REFERENCE ASSIGNMENT+ ASSIGNMENT SPECIAL-ASSIGNMENT TYPE-ASSIGNMENT VALUE-ASSIGNMENT TYPE VALUE BUILTIN-TYPE OBJECT-IDENTIFIER-TYPE CHOICE-TYPE OCTET-STRING-TYPE INTEGER-TYPE TAGGED-TYPE "OBJECT" "IDENTIFIER" BUILTIN-VALUE OBJECT-IDENTIFIER-VALUE "{" OBJ-ID-COMPONENTS-LIST "}" OBJ-ID-COMPONENTS+ OBJ-ID-COMPONENTS NAME-AND-NUMBER-FORM NAME-FORM NUMBER-FORM IDENTIFIER "(" ")" A-NUMBER "OBJECT-TYPE" "MACRO" GARBAGE+ GARBAGE ANY-THING "CHOICE" "OCTET" "STRING" STRING-OPTIONS "SIZE" "INTEGER" ".." TAG "IMPLICIT" "EXPLICIT" "[" CLASS CLASS-NUMBER "]" "UNIVERSAL" "APPLICATION" "PRIVATE" "," ) + + +#35(5 6 7 9 10 14 16 17 21 22 36 37 40 42 48 49 50 51 52 53 56 57 58 59 61 62 63 65 66 67 70 71 72 73 74 ) + +#62((1 . 1)(3 . 6)(4 . 1)(8 . 3)(8 . 0)(11 . 3)(11 . 3)(11 . 0)(15 . 1)(15 . 0)(19 . 1)(12 . 1)(12 . 0)(20 . 1)(20 . 1)(13 . 1)(24 . 1)(24 . 1)(24 . 1)(26 . 3)(27 . 4)(28 . 1)(30 . 1)(30 . 1)(30 . 1)(30 . 1)(30 . 1)(31 . 2)(29 . 1)(38 . 1)(39 . 3)(41 . 1)(44 . 1)(44 . 1)(44 . 1)(45 . 4)(46 . 1)(47 . 1)(25 . 6)(55 . 1)(32 . 4)(33 . 3)(60 . 6)(60 . 0)(34 . 6)(35 . 2)(35 . 3)(35 . 3)(64 . 4)(69 . 1)(68 . 1)(68 . 1)(68 . 1)(68 . 0)(54 . 1)(54 . 2)(43 . 1)(43 . 2)(23 . 1)(23 . 2)(18 . 1)(18 . 3)) + +#104( +((10 :S 8)) +((2 :A 0)) +((5 :S 3)) +((6 :S 4)) +((7 :S 5)) +((9 :R 4) (14 :S 97) (21 :R 7) (22 :R 7) (52 :R 7)) +((9 :S 7)) +((2 :R 1)) +((5 :R 2)) +((21 :S 18) (22 :R 12) (52 :R 12)) +((21 :S 25) (22 :S 28) (52 :S 53)) +((9 :R 3)) +((16 :S 13)) +((21 :R 5) (22 :R 5) (52 :R 5)) +((16 :S 15)) +((21 :R 6) (22 :R 6) (52 :R 6)) +((16 :R 8)) +((16 :R 10) (74 :R 10)) +((21 :R 11) (22 :R 11) (52 :R 11)) +((16 :R 13) (74 :R 13)) +((16 :R 14) (74 :R 14)) +((9 :R 15)) +((9 :R 16) (21 :R 16) (22 :R 16) (52 :R 16)) +((9 :R 17) (21 :R 17) (22 :R 17) (52 :R 17)) +((9 :R 18) (21 :R 18) (22 :R 18) (52 :R 18)) +((6 :S 26)) +((36 :S 38) (57 :S 60) (58 :S 64) (62 :S 73) (67 :S 84)) +((9 :R 19) (21 :R 19) (22 :R 19) (52 :R 19)) +((36 :S 38) (57 :S 60) (58 :S 64) (62 :S 73) (67 :S 84)) +((6 :S 30)) +((40 :S 42)) +((9 :R 20) (21 :R 20) (22 :R 20) (52 :R 20)) +((6 :R 21) (9 :R 21) (21 :R 21) (22 :R 21) (52 :R 21)) +((6 :R 22) (9 :R 22) (21 :R 22) (22 :R 22) (52 :R 22)) +((6 :R 23) (9 :R 23) (21 :R 23) (22 :R 23) (52 :R 23)) +((6 :R 24) (9 :R 24) (21 :R 24) (22 :R 24) (52 :R 24)) +((6 :R 25) (9 :R 25) (21 :R 25) (22 :R 25) (52 :R 25)) +((6 :R 26) (9 :R 26) (21 :R 26) (22 :R 26) (52 :R 26)) +((37 :S 39)) +((6 :R 27) (9 :R 27) (21 :R 27) (22 :R 27) (52 :R 27)) +((9 :R 28) (21 :R 28) (22 :R 28) (52 :R 28)) +((9 :R 29) (21 :R 29) (22 :R 29) (52 :R 29)) +((48 :S 98) (51 :S 52)) +((42 :S 44)) +((9 :R 30) (21 :R 30) (22 :R 30) (52 :R 30)) +((42 :R 31)) +((42 :R 32) (48 :R 32) (51 :R 32)) +((42 :R 33) (48 :R 33) (51 :R 33)) +((42 :R 34) (48 :R 34) (51 :R 34)) +((51 :S 52)) +((50 :S 51)) +((42 :R 35) (48 :R 35) (51 :R 35)) +((42 :R 37) (48 :R 37) (50 :R 37) (51 :R 37)) +((53 :S 54)) +((6 :S 55)) +((7 :S 56)) +((56 :S 59)) +((9 :S 58)) +((9 :R 38) (21 :R 38) (22 :R 38) (52 :R 38)) +((9 :R 39) (42 :R 39) (56 :R 39)) +((40 :S 61)) +((56 :S 59)) +((42 :S 63)) +((6 :R 40) (9 :R 40) (21 :R 40) (22 :R 40) (52 :R 40)) +((59 :S 65)) +((6 :R 43) (9 :R 43) (21 :R 43) (22 :R 43) (49 :S 67) (52 :R 43)) +((6 :R 41) (9 :R 41) (21 :R 41) (22 :R 41) (52 :R 41)) +((61 :S 68)) +((49 :S 69)) +((51 :S 70)) +((50 :S 71)) +((50 :S 72)) +((6 :R 42) (9 :R 42) (21 :R 42) (22 :R 42) (52 :R 42)) +((49 :S 74)) +((51 :S 75)) +((63 :S 76)) +((51 :S 77)) +((50 :S 78)) +((6 :R 44) (9 :R 44) (21 :R 44) (22 :R 44) (52 :R 44)) +((6 :R 45) (9 :R 45) (21 :R 45) (22 :R 45) (52 :R 45)) +((36 :S 38) (57 :S 60) (58 :S 64) (62 :S 73) (67 :S 84)) +((6 :R 46) (9 :R 46) (21 :R 46) (22 :R 46) (52 :R 46)) +((36 :S 38) (57 :S 60) (58 :S 64) (62 :S 73) (67 :S 84)) +((6 :R 47) (9 :R 47) (21 :R 47) (22 :R 47) (52 :R 47)) +((51 :R 53) (71 :S 89) (72 :S 90) (73 :S 91)) +((51 :S 88)) +((70 :S 87)) +((36 :R 48) (57 :R 48) (58 :R 48) (62 :R 48) (65 :R 48) (66 :R 48) (67 :R 48)) +((70 :R 49)) +((51 :R 50)) +((51 :R 51)) +((51 :R 52)) +((9 :R 55) (42 :R 55)) +((42 :R 57)) +((9 :R 59)) +((21 :S 19) (22 :S 20)) +((16 :R 61)) +((16 :R 9) (17 :S 14) (21 :S 19) (22 :S 20)) +((42 :R 36) (48 :R 36) (49 :S 49) (51 :R 36)) +((9 :R 54) (42 :R 54) (56 :S 59)) +((42 :R 56) (48 :S 98) (51 :S 52)) +((9 :R 58) (21 :S 25) (22 :S 28) (52 :S 53)) +((16 :R 60) (74 :S 95)) +((36 :S 38) (57 :S 60) (58 :S 64) (62 :S 73) (65 :S 80) (66 :S 82) (67 :S 84))) + +#104( +((3 . 1)(4 . 2)) +() +() +() +() +((8 . 6)(11 . 9)) +() +() +() +((12 . 10)) +((13 . 11)(23 . 21)(24 . 101)(25 . 22)(26 . 23)(27 . 24)) +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +((28 . 27)(30 . 32)(31 . 33)(32 . 34)(33 . 35)(34 . 36)(35 . 37)(64 . 103)) +() +((28 . 29)(30 . 32)(31 . 33)(32 . 34)(33 . 35)(34 . 36)(35 . 37)(64 . 103)) +() +((29 . 31)(38 . 40)(39 . 41)) +() +() +() +() +() +() +() +() +() +() +() +((41 . 43)(43 . 45)(44 . 100)(45 . 46)(46 . 47)(47 . 48)) +() +() +() +() +() +() +((47 . 50)) +() +() +() +() +() +() +((54 . 57)(55 . 99)) +() +() +() +() +((54 . 62)(55 . 99)) +() +() +() +((60 . 66)) +() +() +() +() +() +() +() +() +() +() +() +() +() +() +((28 . 81)(30 . 32)(31 . 33)(32 . 34)(33 . 35)(34 . 36)(35 . 37)(64 . 103)) +() +((28 . 83)(30 . 32)(31 . 33)(32 . 34)(33 . 35)(34 . 36)(35 . 37)(64 . 103)) +() +((68 . 85)) +((69 . 86)) +() +() +() +() +() +() +() +() +() +((18 . 96)(19 . 102)(20 . 17)) +() +((15 . 12)(18 . 16)(19 . 102)(20 . 17)) +() +((54 . 92)(55 . 99)) +((43 . 93)(44 . 100)(45 . 46)(46 . 47)(47 . 48)) +((23 . 94)(24 . 101)(25 . 22)(26 . 23)(27 . 24)) +() +((28 . 79)(30 . 32)(31 . 33)(32 . 34)(33 . 35)(34 . 36)(35 . 37)(64 . 103))) +0 + +2 + +#37((MODULE-DEFINITION . #S(ZEBU::ZB-RULE :-NAME MODULE-DEFINITION :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (MODULE-IDENTIFIER "DEFINITIONS" "::=" "BEGIN" MODULE-BODY "END") :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE MODULE-DEFINITION :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL -IDENTIFIER :-VALUE MODULE-IDENTIFIER) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL -BODY :-VALUE MODULE-BODY))) :-BUILD-FN MODULE-DEFINITION248)))) +(MODULE-IDENTIFIER . #S(ZEBU::ZB-RULE :-NAME MODULE-IDENTIFIER :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (MODULE-REFERENCE) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(MODULE-BODY . #S(ZEBU::ZB-RULE :-NAME MODULE-BODY :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (EXPORTS IMPORTS ASSIGNMENT-LIST) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE MODULE-BODY :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL -ASSIGNMENT-LIST :-VALUE ASSIGNMENT-LIST))) :-BUILD-FN MODULE-BODY247) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(EXPORTS . #S(ZEBU::ZB-RULE :-NAME EXPORTS :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("EXPORTS" SYMBOLS-EXPORTED ";") :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX ("EXPORTS" "ALL" ";") :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(SYMBOLS-EXPORTED . #S(ZEBU::ZB-RULE :-NAME SYMBOLS-EXPORTED :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (SYMBOL+,1$) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(SYMBOL . #S(ZEBU::ZB-RULE :-NAME SYMBOL :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (REFERENCE) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(IMPORTS . #S(ZEBU::ZB-RULE :-NAME IMPORTS :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (TYPE-REFERENCE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(REFERENCE . #S(ZEBU::ZB-RULE :-NAME REFERENCE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (TYPE-REFERENCE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (VALUE-REFERENCE) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(ASSIGNMENT-LIST . #S(ZEBU::ZB-RULE :-NAME ASSIGNMENT-LIST :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (ASSIGNMENT+) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE ASSIGNMENT-LIST :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL -LIST :-VALUE ASSIGNMENT+))) :-BUILD-FN ASSIGNMENT-LIST246)))) +(ASSIGNMENT . #S(ZEBU::ZB-RULE :-NAME ASSIGNMENT :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (SPECIAL-ASSIGNMENT) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE ASSIGNMENT :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL -TYPE :-VALUE :SPECIAL) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL -VALUE :-VALUE SPECIAL-ASSIGNMENT))) :-BUILD-FN ASSIGNMENT243) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (TYPE-ASSIGNMENT) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE ASSIGNMENT :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL -TYPE :-VALUE :TYPE) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL -VALUE :-VALUE TYPE-ASSIGNMENT))) :-BUILD-FN ASSIGNMENT244) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (VALUE-ASSIGNMENT) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE ASSIGNMENT :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL -TYPE :-VALUE :VALUE) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL -VALUE :-VALUE VALUE-ASSIGNMENT))) :-BUILD-FN ASSIGNMENT245)))) +(TYPE-ASSIGNMENT . #S(ZEBU::ZB-RULE :-NAME TYPE-ASSIGNMENT :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (TYPE-REFERENCE "::=" TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(VALUE-ASSIGNMENT . #S(ZEBU::ZB-RULE :-NAME VALUE-ASSIGNMENT :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (VALUE-REFERENCE TYPE "::=" VALUE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(TYPE . #S(ZEBU::ZB-RULE :-NAME TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (BUILTIN-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(BUILTIN-TYPE . #S(ZEBU::ZB-RULE :-NAME BUILTIN-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (OBJECT-IDENTIFIER-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (CHOICE-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (OCTET-STRING-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (INTEGER-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (TAGGED-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(OBJECT-IDENTIFIER-TYPE . #S(ZEBU::ZB-RULE :-NAME OBJECT-IDENTIFIER-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("OBJECT" "IDENTIFIER") :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(VALUE . #S(ZEBU::ZB-RULE :-NAME VALUE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (BUILTIN-VALUE) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(BUILTIN-VALUE . #S(ZEBU::ZB-RULE :-NAME BUILTIN-VALUE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (OBJECT-IDENTIFIER-VALUE) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(OBJECT-IDENTIFIER-VALUE . #S(ZEBU::ZB-RULE :-NAME OBJECT-IDENTIFIER-VALUE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("{" OBJ-ID-COMPONENTS-LIST "}") :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(OBJ-ID-COMPONENTS-LIST . #S(ZEBU::ZB-RULE :-NAME OBJ-ID-COMPONENTS-LIST :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (OBJ-ID-COMPONENTS+) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE OBJ-ID-COMPONENTS-LIST :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL -LIST :-VALUE OBJ-ID-COMPONENTS+))) :-BUILD-FN OBJ-ID-COMPONENTS-LIST242)))) +(OBJ-ID-COMPONENTS . #S(ZEBU::ZB-RULE :-NAME OBJ-ID-COMPONENTS :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (NAME-AND-NUMBER-FORM) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (NAME-FORM) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (NUMBER-FORM) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(NAME-AND-NUMBER-FORM . #S(ZEBU::ZB-RULE :-NAME NAME-AND-NUMBER-FORM :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (IDENTIFIER "(" NUMBER-FORM ")") :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(NAME-FORM . #S(ZEBU::ZB-RULE :-NAME NAME-FORM :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (IDENTIFIER) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(NUMBER-FORM . #S(ZEBU::ZB-RULE :-NAME NUMBER-FORM :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (A-NUMBER) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(SPECIAL-ASSIGNMENT . #S(ZEBU::ZB-RULE :-NAME SPECIAL-ASSIGNMENT :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("OBJECT-TYPE" "MACRO" "::=" "BEGIN" GARBAGE+ "END") :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(GARBAGE . #S(ZEBU::ZB-RULE :-NAME GARBAGE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (ANY-THING) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(CHOICE-TYPE . #S(ZEBU::ZB-RULE :-NAME CHOICE-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("CHOICE" "{" GARBAGE+ "}") :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(OCTET-STRING-TYPE . #S(ZEBU::ZB-RULE :-NAME OCTET-STRING-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("OCTET" "STRING" STRING-OPTIONS) :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(STRING-OPTIONS . #S(ZEBU::ZB-RULE :-NAME STRING-OPTIONS :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("(" "SIZE" "(" A-NUMBER ")" ")") :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(INTEGER-TYPE . #S(ZEBU::ZB-RULE :-NAME INTEGER-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("INTEGER" "(" A-NUMBER ".." A-NUMBER ")") :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(TAGGED-TYPE . #S(ZEBU::ZB-RULE :-NAME TAGGED-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (TAG TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (TAG "IMPLICIT" TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (TAG "EXPLICIT" TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(TAG . #S(ZEBU::ZB-RULE :-NAME TAG :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("[" CLASS CLASS-NUMBER "]") :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(CLASS-NUMBER . #S(ZEBU::ZB-RULE :-NAME CLASS-NUMBER :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (A-NUMBER) :-SEMANTICS NIL :-BUILD-FN IDENTITY)))) +(CLASS . #S(ZEBU::ZB-RULE :-NAME CLASS :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("UNIVERSAL") :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX ("APPLICATION") :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX ("PRIVATE") :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*)))) +(GARBAGE+ . #S(ZEBU::ZB-RULE :-NAME GARBAGE+ :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (GARBAGE) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE GARBAGE))) :-BUILD-FN GARBAGE+240) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (GARBAGE GARBAGE+) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE GARBAGE) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL REST :-VALUE GARBAGE+))) :-BUILD-FN GARBAGE+241)))) +(OBJ-ID-COMPONENTS+ . #S(ZEBU::ZB-RULE :-NAME OBJ-ID-COMPONENTS+ :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (OBJ-ID-COMPONENTS) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE OBJ-ID-COMPONENTS))) :-BUILD-FN OBJ-ID-COMPONENTS+238) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (OBJ-ID-COMPONENTS OBJ-ID-COMPONENTS+) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE OBJ-ID-COMPONENTS) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL REST :-VALUE OBJ-ID-COMPONENTS+))) :-BUILD-FN OBJ-ID-COMPONENTS+239)))) +(ASSIGNMENT+ . #S(ZEBU::ZB-RULE :-NAME ASSIGNMENT+ :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (ASSIGNMENT) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE ASSIGNMENT))) :-BUILD-FN ASSIGNMENT+236) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (ASSIGNMENT ASSIGNMENT+) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE ASSIGNMENT) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL REST :-VALUE ASSIGNMENT+))) :-BUILD-FN ASSIGNMENT+237)))) +(SYMBOL+,1$ . #S(ZEBU::ZB-RULE :-NAME SYMBOL+,1$ :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (SYMBOL) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE SYMBOL))) :-BUILD-FN SYMBOL+,1$234) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (SYMBOL "," SYMBOL+,1$) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE SYMBOL) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL REST :-VALUE SYMBOL+,1$))) :-BUILD-FN SYMBOL+,1$235)))) +) \ No newline at end of file
Modified: trunk/asn.1/asn.1.zb ============================================================================== --- trunk/asn.1/asn.1.zb (original) +++ trunk/asn.1/asn.1.zb Sat Sep 15 17:13:11 2007 @@ -1,29 +1,94 @@ ;;;; -*- Mode: Lisp -*-
-(:name "asn.1" - :domain-file "asn.1-domain" +(:name "ASN.1" + :domain-file "asn.1-domain.lisp" :package "ASN.1" :grammar "zebu-mg" :identifier-start-chars "abcdefghijklmnopqrstuvwxyz" :identifier-continue-chars "-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" - :lex-cats ((BSTRING "'[01]+'B") - (HSTRING "'([A-F0-9]+)'H")) - ) - -;; Domain definition - -Module-Definition := kb-domain: [(-identifier Module-Identifier) - (-body Module-Body)] ; - -;; Productions + :lex-cats (;;(BSTRING "'[01]+'B") + ;;(HSTRING "'([A-F0-9]+)'H") + (A-Number "[0-9]+") + (Value-Reference "[a-z][a-zA-Z0-9-]+") + (Type-Reference "[A-Z][a-zA-Z0-9-]*") + (Module-Reference "[A-Z][a-zA-Z0-9-]*") + (Any-Thing "[^ ]+"))) + +;; Domain Definitions + +Module-Definition := kb-domain: [(-identifier) (-body)]; +Module-Body := kb-domain: [(-assignment-list)]; +Assignment-List := kb-domain: [(-list kb-sequence)]; +Assignment := kb-domain: [(-type) (-value)]; +Obj-Id-Components-List := kb-domain: [(-list kb-sequence)];
+;; Rule Definitions Module-Definition --> Module-Identifier "DEFINITIONS" "::=" "BEGIN" Module-Body "END" { Module-Definition:[(-identifier Module-Identifier) (-body Module-Body)] };
-Module-Identifier --> Identifier; +Module-Identifier --> Module-Reference; + +Module-Body --> Exports Imports Assignment-List + { Module-Body:[(-assignment-list Assignment-List)] } + | ; + +Exports --> "EXPORTS" Symbols-Exported ";" | "EXPORTS" "ALL" ";" |; + +Symbols-Exported --> Symbol+ "," | ; + +Symbol --> Reference; + +Imports --> Type-Reference | ; + +Reference --> Type-Reference | Value-Reference; + +Assignment-List --> Assignment+ " " { Assignment-List:[(-list Assignment+)] }; + +Assignment --> Special-Assignment { Assignment:[(-type :special) (-value Special-Assignment)] } + | Type-Assignment { Assignment:[(-type :type) (-value Type-Assignment)] } + | Value-Assignment { Assignment:[(-type :value) (-value Value-Assignment)] }; + +Type-Assignment --> Type-Reference "::=" Type; +Value-Assignment --> Value-Reference Type "::=" Value; + +Type --> Builtin-Type; + +Builtin-Type --> Object-Identifier-Type + | Choice-Type + | Octet-String-Type + | Integer-Type + | Tagged-Type; + +Object-Identifier-Type --> "OBJECT" "IDENTIFIER"; + +Value --> Builtin-Value; + +Builtin-Value --> Object-Identifier-Value; + +Object-Identifier-Value --> "{" Obj-Id-Components-List "}"; + +Obj-Id-Components-List --> Obj-Id-Components+ " " + { Obj-Id-Components-List:[(-list Obj-Id-Components+)] }; + +Obj-Id-Components --> Name-And-Number-Form | Name-Form | Number-Form; + +Name-And-Number-Form --> Identifier "(" Number-Form ")"; +Name-Form --> Identifier; +Number-Form --> A-Number; + +Special-Assignment --> "OBJECT-TYPE" "MACRO" "::=" "BEGIN" Garbage+ " " "END"; +Garbage --> Any-Thing; + +Choice-Type --> "CHOICE" "{" Garbage+ " " "}"; +Octet-String-Type --> "OCTET" "STRING" String-Options; +String-Options --> "(" "SIZE" "(" A-Number ")" ")" |;
-Module-Body --> Identifier; +Integer-Type --> "INTEGER" "(" A-Number ".." A-Number ")"; +Tagged-Type --> Tag Type | Tag "IMPLICIT" Type | Tag "EXPLICIT" Type; +Tag --> "[" Class Class-Number "]"; +Class-Number --> A-Number; +Class --> "UNIVERSAL" | "APPLICATION" | "PRIVATE" |;
Modified: trunk/asn.1/ber.lisp ============================================================================== --- trunk/asn.1/ber.lisp (original) +++ trunk/asn.1/ber.lisp Sat Sep 15 17:13:11 2007 @@ -41,7 +41,7 @@ (type (integer 0) tags)) (assert (and (<= 0 class 3) (<= 0 p/c 1) (<= 0 tags))) (labels ((iter (n p acc) - (if (= n 0) acc + (if (zerop n) acc (multiple-value-bind (q r) (floor n 128) (iter q 1 (cons (logior (ash p 7) r) acc)))))) (if (< tags 31) @@ -52,14 +52,14 @@ (defun ber-decode-type (stream) "Decode BER Type Domain" (declare (type stream stream)) - (let ((byte (stream-read-byte stream)) + (let ((byte (read-byte stream)) (type-length 1)) (let ((class (ldb (byte 2 6) byte)) (p/c (ldb (byte 1 5) byte)) (tags (ldb (byte 5 0) byte))) (when (= tags 31) (setf tags (labels ((iter (acc) - (setf byte (stream-read-byte stream)) + (setf byte (read-byte stream)) (incf type-length) (let ((temp (logior (ash acc 7) (ldb (byte 7 0) byte)))) (if (= (ldb (byte 1 7) byte) 1) (iter temp) temp)))) @@ -88,7 +88,7 @@ (declare (type (integer 0) length)) (assert (<= 0 length (1- (expt 2 1008)))) (labels ((iter (n acc l) - (if (= n 0) (cons (mod (logior 128 l) 256) acc) + (if (zerop n) (cons (mod (logior 128 l) 256) acc) (multiple-value-bind (q r) (floor n 256) (iter q (cons r acc) (1+ l)))))) (if (< length 128) (list length) @@ -97,15 +97,15 @@ (defun ber-decode-length (stream) "Decode BER Length Domain" (declare (type stream stream)) - (let ((byte (stream-read-byte stream)) + (let ((byte (read-byte stream)) (length-length 1)) (let ((flag (ldb (byte 1 7) byte)) (l-or-n (ldb (byte 7 0) byte))) - (let ((res (if (= flag 0) l-or-n + (let ((res (if (zerop flag) l-or-n (let ((acc 0)) (dotimes (i l-or-n) (setf acc (logior (ash acc 8) - (stream-read-byte stream))) + (read-byte stream))) (incf length-length) acc))))) (values res length-length))))) @@ -125,7 +125,7 @@ (type integer length) (ignore type)) (dotimes (i length) - (stream-read-byte stream)) + (read-byte stream)) nil)
;;;;;;;;;;;;;;;;;;;;;;; @@ -137,7 +137,7 @@ (defmethod ber-encode ((value integer)) (assert (<= 0 value)) (labels ((iter (n acc l) - (if (= n 0) (values acc l) + (if (zerop n) (values acc l) (multiple-value-bind (q r) (floor n 256) (iter q (cons r acc) (1+ l)))))) (multiple-value-bind (v l) (iter value nil 0) @@ -151,7 +151,7 @@ (ignore type)) (labels ((iter (i acc) (if (= i length) acc - (iter (1+ i) (logior (ash acc 8) (stream-read-byte stream)))))) + (iter (1+ i) (logior (ash acc 8) (read-byte stream)))))) (iter 0 0)))
;;; OCTET STRING (:octet-string) @@ -166,7 +166,7 @@ (type integer length) (ignore type)) (let ((str (make-string length))) - (map-into str #'(lambda () (code-char (stream-read-byte stream)))))) + (map-into str #'(lambda () (code-char (read-byte stream))))))
;;; SEQUENCE (:sequence)
@@ -182,7 +182,7 @@ (type integer length) (ignore type)) (labels ((iter (length-left acc) - (if (= length-left 0) + (if (zerop length-left) (nreverse acc) (multiple-value-bind (sub-type sub-type-length) (ber-decode-type stream) @@ -205,7 +205,7 @@ (declare (type stream stream) (type integer length) (ignore type)) - (assert (= length 0)) + (assert (zerop length)) nil)
(eval-when (:load-toplevel :execute)
Modified: trunk/asn.1/mib.lisp ============================================================================== --- trunk/asn.1/mib.lisp (original) +++ trunk/asn.1/mib.lisp Sat Sep 15 17:13:11 2007 @@ -4,10 +4,6 @@
(in-package :asn.1)
-(defparameter *mib-tree* '(nil nil (1 ("iso") - (3 ("org") - (6 ("dod")))))) - (proclaim '(inline tree-id tree-name tree-object tree-nodes)) (defun tree-id (node) (car node)) (defun tree-name (node) (caadr node)) @@ -45,3 +41,37 @@ (defmethod print-object ((obj object-id) stream) (format stream "[~{.~A~}]" (oid-subids obj)))
+(defparameter *mib-tree* '(nil nil (1 ("iso") + (3 ("org") + (6 ("dod")))))) + +(defvar *mib-pathname-base* #p"/usr/share/snmp/mibs/") + +(defun mib-pathname (name &optional (base *mib-pathname-base*)) + (merge-pathnames (make-pathname :name name :type "txt") + base)) + +(defparameter *mibs-list* + '("RFC1155-SMI")) + +(defvar *asn.1-def* (merge-pathnames + (make-pathname :name "asn.1" :type "zb" + :directory '(:relative "asn.1")) + (asdf:component-pathname (asdf:find-system :net-snmp)))) + +(defparameter *asn.1-syntax* (merge-pathnames + (make-pathname :name "asn.1" :type "tab" + :directory '(:relative "asn.1")) + (asdf:component-pathname (asdf:find-system :net-snmp)))) + +(defun parse-mib (file) + (let ((zb:*comment-start* "--") + (zb:*comment-brackets* '(("/*" . "*/")))) + (zb:file-parser file :grammar (zb:find-grammar "ASN.1") :verbose nil))) + +(defun parse-oid-def (syntax-tree) + (let ((module (car syntax-tree))) + (let ((assignment-list (Assignment-List--list + (Module-Body--assignment-list + (Module-Definition--body module))))) + assignment-list)))
Modified: trunk/asn.1/oid.lisp ============================================================================== --- trunk/asn.1/oid.lisp (original) +++ trunk/asn.1/oid.lisp Sat Sep 15 17:13:11 2007 @@ -24,22 +24,22 @@ ;;; Note: defdelim and ddfn are copyed from ;;; Page 228 (Figure 17.4), Paul Graham's /On Lisp/.
-(eval-when (:compile-toplevel :load-toplevel :execute) - (defmacro defdelim (left right parms &body body) - `(ddfn ,left ,right #'(lambda ,parms ,@body))) - - (let ((rpar (get-macro-character #)))) - (defun ddfn (left right fn) - (set-macro-character right rpar) - (set-dispatch-macro-character ## left - #'(lambda (stream char-1 char-2) - (declare (ignore char-1 char-2)) - (apply fn - (read-delimited-list right stream t)))))) - - ;;; Object ID Reader Macro #{...} - (defdelim #{ #} (&rest args) - `(parse-oid (list ,@args)))) +;;;; (eval-when (:compile-toplevel :load-toplevel :execute) +;;;; (defmacro defdelim (left right parms &body body) +;;;; `(ddfn ,left ,right #'(lambda ,parms ,@body))) + +;;;; (let ((rpar (get-macro-character #)))) +;;;; (defun ddfn (left right fn) +;;;; (set-macro-character right rpar) +;;;; (set-dispatch-macro-character ## left +;;;; #'(lambda (stream char-1 char-2) +;;;; (declare (ignore char-1 char-2)) +;;;; (apply fn +;;;; (read-delimited-list right stream t)))))) + +;;;; ;;; Object ID Reader Macro #{...} +;;;; (defdelim #{ #} (&rest args) +;;;; `(parse-oid (list ,@args))))
;;; Note: oid-component, oid-component-length, list-prefix-p, oid-list->=, ;;; oid-list-< and oid-prefix-p are copyed from @@ -83,10 +83,10 @@
(defmethod ber-encode ((value object-id)) (labels ((number-get (n) - (if (= n 0) (values (list 0) 1) + (if (zerop n) (values (list 0) 1) (number-split n 0 nil 0))) (number-split (n p acc l) - (if (= n 0) (values acc l) + (if (zerop n) (values acc l) (multiple-value-bind (q r) (floor n 128) (number-split q 1 (cons (logior (ash p 7) r) acc) (1+ l))))) (iter (oids acc len) @@ -114,16 +114,17 @@ (declare (type stream stream) (type integer length) (ignore type)) - (if (= length 0) #{} + (if (zerop length) + (make-instance 'objet-id) (labels ((get-number (acc len) - (let* ((byte (stream-read-byte stream)) + (let* ((byte (read-byte stream)) (val (logior (ash acc 7) (logand byte 127)))) (if (< byte 128) (values val len) (get-number val (1+ len))))) (iter (left-length acc head-p) (declare (type integer left-length) (type list acc)) - (if (= left-length 0) (nreverse acc) + (if (zerop left-length) (nreverse acc) (multiple-value-bind (n l) (get-number 0 1) (if head-p (multiple-value-bind (q r) (floor n 40)
Modified: trunk/asn.1/package.lisp ============================================================================== --- trunk/asn.1/package.lisp (original) +++ trunk/asn.1/package.lisp Sat Sep 15 17:13:11 2007 @@ -2,6 +2,7 @@
(defpackage :asn.1 (:use :common-lisp - #+lispworks :stream)) + #+lispworks :stream + :zebu))
(in-package :asn.1)
Modified: trunk/asn.1/stream-test.lisp ============================================================================== --- trunk/asn.1/stream-test.lisp (original) +++ trunk/asn.1/stream-test.lisp Sat Sep 15 17:13:11 2007 @@ -1,5 +1,8 @@ (in-package :asn.1)
+(eval-when (:compile-toplevel :load-toplevel) + (clc:clc-require :zebu-compiler)) + (defclass ber-stream (fundamental-input-stream) ((sequence :type sequence :initarg :seq :reader ber-sequence) (length :type integer :accessor ber-length) @@ -22,3 +25,20 @@ x (ber-decode (make-instance 'ber-stream :seq code)) code code) x)) + +(defun mib-display (name &optional (lines 10)) + (let ((file (mib-pathname name))) + (with-open-file (s file :direction :input :element-type 'base-char) + (dotimes (i lines file) + (princ (read-line s)) + (fresh-line))))) + +(defun load-syntax (&optional (def *asn.1-def*) (syntax *asn.1-syntax*)) + (zb:zebu-compile-file def :output-file syntax) + (zb:zebu-load-file syntax)) + +(defun test-syntax (name) + (parse-mib (merge-pathnames + (make-pathname :name name :type "asn" + :directory '(:relative "asn.1" "test")) + (asdf:component-pathname (asdf:find-system :net-snmp)))))
Modified: trunk/asn.1/test/1.asn ============================================================================== --- trunk/asn.1/test/1.asn (original) +++ trunk/asn.1/test/1.asn Sat Sep 15 17:13:11 2007 @@ -1,4 +1,101 @@ -aAAA DEFINITIONS ::= -BEGIN - bBBB +RFC1155-SMI DEFINITIONS ::= BEGIN + +EXPORTS -- EVERYTHING + internet, directory, mgmt, + experimental, private, enterprises, + OBJECT-TYPE, ObjectName, ObjectSyntax, SimpleSyntax, + ApplicationSyntax, NetworkAddress, IpAddress, + Counter, Gauge, TimeTicks, Opaque; + + -- the path to the root + + internet OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 } + + directory OBJECT IDENTIFIER ::= { internet 1 } + + mgmt OBJECT IDENTIFIER ::= { internet 2 } + + experimental OBJECT IDENTIFIER ::= { internet 3 } + + private OBJECT IDENTIFIER ::= { internet 4 } + enterprises OBJECT IDENTIFIER ::= { private 1 } + + -- definition of object types + + + -- names of objects in the MIB + + ObjectName ::= OBJECT IDENTIFIER + + OBJECT-TYPE MACRO ::= + BEGIN + TYPE NOTATION ::= "SYNTAX" type (TYPE ObjectSyntax) + "ACCESS" Access + "STATUS" Status + VALUE NOTATION ::= value (VALUE ObjectName) + + Access ::= "read-only" + | "read-write" + | "write-only" + | "not-accessible" + Status ::= "mandatory" + | "optional" + | "obsolete" + END + + ObjectSyntax ::= + CHOICE { + simple + SimpleSyntax, + -- note that simple SEQUENCEs are not directly + -- mentioned here to keep things simple (i.e., + -- prevent mis-use). However, application-wide + -- types which are IMPLICITly encoded simple + -- SEQUENCEs may appear in the following CHOICE + + application-wide + ApplicationSyntax + } + + SimpleSyntax ::= + CHOICE { + number + INTEGER, + string + OCTET STRING, + object + OBJECT IDENTIFIER, + empty + NULL + } + + ApplicationSyntax ::= + CHOICE { + address + NetworkAddress, + counter + Counter, + gauge + Gauge, + ticks + TimeTicks, + arbitrary + Opaque + + -- other application-wide types, as they are + -- defined, will be added here + } + + -- application-wide types + + NetworkAddress ::= + CHOICE { + internet + IpAddress + } + + IpAddress ::= + [APPLICATION 0] -- in network-byte order + IMPLICIT OCTET STRING (SIZE (4)) + END
Added: trunk/asn.1/test/2.asn ============================================================================== --- (empty file) +++ trunk/asn.1/test/2.asn Sat Sep 15 17:13:11 2007 @@ -0,0 +1,119 @@ +RFC1155-SMI DEFINITIONS ::= BEGIN + +EXPORTS -- EVERYTHING + internet, directory, mgmt, + experimental, private, enterprises, + OBJECT-TYPE, ObjectName, ObjectSyntax, SimpleSyntax, + ApplicationSyntax, NetworkAddress, IpAddress, + Counter, Gauge, TimeTicks, Opaque; + + -- the path to the root + + internet OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 } + + directory OBJECT IDENTIFIER ::= { internet 1 } + + mgmt OBJECT IDENTIFIER ::= { internet 2 } + + experimental OBJECT IDENTIFIER ::= { internet 3 } + + private OBJECT IDENTIFIER ::= { internet 4 } + enterprises OBJECT IDENTIFIER ::= { private 1 } + + -- definition of object types + + OBJECT-TYPE MACRO ::= + BEGIN + TYPE NOTATION ::= "SYNTAX" type (TYPE ObjectSyntax) + "ACCESS" Access + "STATUS" Status + VALUE NOTATION ::= value (VALUE ObjectName) + + Access ::= "read-only" + | "read-write" + | "write-only" + | "not-accessible" + Status ::= "mandatory" + | "optional" + | "obsolete" + END + + -- names of objects in the MIB + + ObjectName ::= + OBJECT IDENTIFIER + + -- syntax of objects in the MIB + + ObjectSyntax ::= + CHOICE { + simple + SimpleSyntax, + -- note that simple SEQUENCEs are not directly + -- mentioned here to keep things simple (i.e., + -- prevent mis-use). However, application-wide + -- types which are IMPLICITly encoded simple + -- SEQUENCEs may appear in the following CHOICE + + application-wide + ApplicationSyntax + } + + SimpleSyntax ::= + CHOICE { + number + INTEGER, + string + OCTET STRING, + object + OBJECT IDENTIFIER, + empty + NULL + } + + ApplicationSyntax ::= + CHOICE { + address + NetworkAddress, + counter + Counter, + gauge + Gauge, + ticks + TimeTicks, + arbitrary + Opaque + + -- other application-wide types, as they are + -- defined, will be added here + } + + -- application-wide types + + NetworkAddress ::= + CHOICE { + internet + IpAddress + } + + IpAddress ::= + [APPLICATION 0] -- in network-byte order + IMPLICIT OCTET STRING (SIZE (4)) + + Counter ::= + [APPLICATION 1] + IMPLICIT INTEGER (0..4294967295) + + Gauge ::= + [APPLICATION 2] + IMPLICIT INTEGER (0..4294967295) + + TimeTicks ::= + [APPLICATION 3] + IMPLICIT INTEGER (0..4294967295) + + Opaque ::= + [APPLICATION 4] -- arbitrary ASN.1 value, + IMPLICIT OCTET STRING -- "double-wrapped" + + END