[cl-net-snmp-cvs] r45 - trunk/asn.1

ctian at common-lisp.net ctian at common-lisp.net
Wed Sep 19 12:35:56 UTC 2007


Author: ctian
Date: Wed Sep 19 08:35:54 2007
New Revision: 45

Added:
   trunk/asn.1/asn.1-domain.lisp
   trunk/asn.1/asn.1.tab
   trunk/asn.1/smi.lisp
   trunk/asn.1/syntax.lisp
Modified:
   trunk/asn.1/ber.lisp
   trunk/asn.1/mib-parse.lisp
   trunk/asn.1/mib.lisp
   trunk/asn.1/stream-test.lisp
Log:
Commit Changes: code reorgnize

Added: trunk/asn.1/asn.1-domain.lisp
==============================================================================
--- (empty file)
+++ trunk/asn.1/asn.1-domain.lisp	Wed Sep 19 08:35:54 2007
@@ -0,0 +1,445 @@
+;;; This file was generated by Zebu (Version 3.5.5)
+
+(IN-PACKAGE "ASN.1")
+(REQUIRE "zebu-package")
+(USE-PACKAGE "ZEBU")
+
+(DEFSTRUCT (OBJECT-IDENTIFIER-VALUE
+            (:INCLUDE KB-DOMAIN)
+            (:PRINT-FUNCTION
+             (LAMBDA
+                 (ITEM STREAM LEVEL &AUX
+                  (%R (OBJECT-IDENTIFIER-VALUE-VALUE 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)))))))
+  VALUE)
+
+(DEFSTRUCT (VALUE-ASSIGNMENT
+            (:INCLUDE KB-DOMAIN)
+            (:PRINT-FUNCTION
+             (LAMBDA
+                 (ITEM STREAM LEVEL &AUX
+                  (%R (VALUE-ASSIGNMENT-NAME ITEM))
+                  (%S (VALUE-ASSIGNMENT-TYPE ITEM))
+                  (%T (VALUE-ASSIGNMENT-VALUE ITEM)))
+               (DECLARE (IGNORE LEVEL))
+               (FORMAT STREAM "~a ~a::=~a" %R %S %T))))
+  NAME
+  TYPE
+  VALUE)
+
+(DEFSTRUCT (OBJECT-TYPE-ASSIGNMENT
+            (:INCLUDE VALUE-ASSIGNMENT)
+            (:PRINT-FUNCTION
+             (LAMBDA
+                 (ITEM STREAM LEVEL &AUX
+                  (%R (OBJECT-TYPE-ASSIGNMENT-NAME ITEM))
+                  (%S (OBJECT-TYPE-ASSIGNMENT-SYNTAX ITEM))
+                  (%T (OBJECT-TYPE-ASSIGNMENT-MAX-ACCESS ITEM))
+                  (%U (OBJECT-TYPE-ASSIGNMENT-STATUS ITEM))
+                  (%V (OBJECT-TYPE-ASSIGNMENT-DESCRIPTION ITEM))
+                  (%W (OBJECT-TYPE-ASSIGNMENT-INDEX ITEM))
+                  (%X (OBJECT-TYPE-ASSIGNMENT-VALUE ITEM)))
+               (DECLARE (IGNORE LEVEL))
+               (FORMAT STREAM
+                       "~a OBJECT-TYPESYNTAX ~a MAX-ACCESS ~a STATUS ~a DESCRIPTION ~s ~a::=~a"
+                       %R
+                       %S
+                       %T
+                       %U
+                       %V
+                       %W
+                       %X))))
+  SYNTAX
+  MAX-ACCESS
+  STATUS
+  DESCRIPTION
+  INDEX)
+
+(DEFSTRUCT (ASSIGNMENT
+            (:INCLUDE KB-DOMAIN)
+            (:PRINT-FUNCTION
+             (LAMBDA
+                 (ITEM STREAM LEVEL &AUX (%R (ASSIGNMENT-VALUE ITEM)))
+               (DECLARE (IGNORE LEVEL))
+               (FORMAT STREAM
+                       "~a"
+                       (LET ((TYPE-ASSIGNMENT %R))
+                         (ZEBU::KB-SEQUENCE-PRINT TYPE-ASSIGNMENT
+                                                  NIL
+                                                  NIL))))))
+  TYPE
+  VALUE)
+
+(DEFSTRUCT (SYMBOLS-FROM-MODULE
+            (:INCLUDE KB-DOMAIN)
+            (:PRINT-FUNCTION
+             (LAMBDA
+                 (ITEM STREAM LEVEL &AUX
+                  (%R (SYMBOLS-FROM-MODULE-SYMBOLS ITEM))
+                  (%S
+                   (SYMBOLS-FROM-MODULE-GLOBAL-MODULE-REFERENCE ITEM)))
+               (DECLARE (IGNORE LEVEL))
+               (FORMAT STREAM
+                       "~a FROM ~a"
+                       (LET ((SYMBOL+\,1$ %R))
+                         (IF (NULL SYMBOL+\,1$)
+                             ""
+                           (LET ((*KB-SEQUENCE-SEPARATOR* ","))
+                             (DECLARE (SPECIAL
+                                       *KB-SEQUENCE-SEPARATOR*))
+                             (ZEBU::KB-SEQUENCE-PRINT SYMBOL+\,1$
+                                                      NIL
+                                                      NIL))))
+                       %S))))
+  SYMBOLS
+  GLOBAL-MODULE-REFERENCE)
+
+(DEFSTRUCT (IMPORTS
+            (:INCLUDE KB-DOMAIN)
+            (:PRINT-FUNCTION
+             (LAMBDA (ITEM STREAM LEVEL &AUX (%R (IMPORTS-LIST ITEM)))
+               (DECLARE (IGNORE LEVEL))
+               (FORMAT STREAM
+                       "IMPORTS ~a;"
+                       (LET ((SYMBOLS-FROM-MODULE* %R))
+                         (ZEBU::KB-SEQUENCE-PRINT SYMBOLS-FROM-MODULE*
+                                                  NIL
+                                                  NIL))))))
+  (LIST NIL :TYPE (OR NULL KB-SEQUENCE))
+  VALID)
+
+(DEFSTRUCT (EXPORTS
+            (:INCLUDE KB-DOMAIN)
+            (:PRINT-FUNCTION
+             (LAMBDA (ITEM STREAM LEVEL &AUX (%R (EXPORTS-LIST ITEM)))
+               (DECLARE (IGNORE LEVEL))
+               (COND ((KB-SEQUENCE-P %R)
+                      (FORMAT STREAM
+                              "EXPORTS ~a;"
+                              (LET ((SYMBOL*\,1$ %R))
+                                (LET
+                                 ((*KB-SEQUENCE-SEPARATOR* ","))
+                                 (DECLARE
+                                  (SPECIAL *KB-SEQUENCE-SEPARATOR*))
+                                 (ZEBU::KB-SEQUENCE-PRINT
+                                  SYMBOL*\,1$
+                                  NIL
+                                  NIL)))))
+                     (T (FORMAT STREAM "EXPORTSALL;"))))))
+  (LIST NIL :TYPE (OR NULL KB-SEQUENCE))
+  ALL-EXPORTS)
+
+(DEFSTRUCT (MODULE-BODY
+            (:INCLUDE KB-DOMAIN)
+            (:PRINT-FUNCTION
+             (LAMBDA
+                 (ITEM STREAM LEVEL &AUX
+                  (%R (MODULE-BODY-EXPORTS ITEM))
+                  (%S (MODULE-BODY-IMPORTS ITEM))
+                  (%T (MODULE-BODY-ASSIGNMENT-LIST ITEM)))
+               (DECLARE (IGNORE LEVEL))
+               (FORMAT STREAM
+                       "~a ~a ~a"
+                       %R
+                       %S
+                       (LET ((ASSIGNMENT* %T))
+                         (ZEBU::KB-SEQUENCE-PRINT ASSIGNMENT*
+                                                  NIL
+                                                  NIL))))))
+  EXPORTS
+  IMPORTS
+  (ASSIGNMENT-LIST NIL :TYPE (OR NULL KB-SEQUENCE)))
+
+(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 ASSIGNMENT*0 (ASSIGNMENT ASSIGNMENT*)
+  (MAKE-KB-SEQUENCE :FIRST ASSIGNMENT :REST ASSIGNMENT*))
+
+(DEFUN SYMBOL*\,1$1 (SYMBOL |Rest-SYMBOL*,1$|)
+  (MAKE-KB-SEQUENCE :FIRST SYMBOL :REST |Rest-SYMBOL*,1$|))
+
+(DEFUN |Rest-SYMBOL*,1$2| (DUMMY SYMBOL |Rest-SYMBOL*,1$|)
+  (DECLARE (IGNORE DUMMY))
+  (MAKE-KB-SEQUENCE :FIRST SYMBOL :REST |Rest-SYMBOL*,1$|))
+
+(DEFUN SYMBOLS-FROM-MODULE*3 (SYMBOLS-FROM-MODULE SYMBOLS-FROM-MODULE*)
+  (MAKE-KB-SEQUENCE :FIRST
+                    SYMBOLS-FROM-MODULE
+                    :REST
+                    SYMBOLS-FROM-MODULE*))
+
+(DEFUN SYMBOL+\,1$4 (SYMBOL) (MAKE-KB-SEQUENCE :FIRST SYMBOL))
+
+(DEFUN SYMBOL+\,1$5 (SYMBOL DUMMY SYMBOL+\,1$)
+  (DECLARE (IGNORE DUMMY))
+  (MAKE-KB-SEQUENCE :FIRST SYMBOL :REST SYMBOL+\,1$))
+
+(DEFUN GARBAGE+6 (GARBAGE) (MAKE-KB-SEQUENCE :FIRST GARBAGE))
+
+(DEFUN GARBAGE+7 (GARBAGE GARBAGE+)
+  (MAKE-KB-SEQUENCE :FIRST GARBAGE :REST GARBAGE+))
+
+(DEFUN MODULE-REVISION*8 (MODULE-REVISION MODULE-REVISION*)
+  (MAKE-KB-SEQUENCE :FIRST MODULE-REVISION :REST MODULE-REVISION*))
+
+(DEFUN IDENTIFIER+\,1$9 (IDENTIFIER)
+  (MAKE-KB-SEQUENCE :FIRST IDENTIFIER))
+
+(DEFUN IDENTIFIER+\,1$10 (IDENTIFIER DUMMY IDENTIFIER+\,1$)
+  (DECLARE (IGNORE DUMMY))
+  (MAKE-KB-SEQUENCE :FIRST IDENTIFIER :REST IDENTIFIER+\,1$))
+
+(DEFUN MODULE-COMPLIANCE-GROUP+11 (MODULE-COMPLIANCE-GROUP)
+  (MAKE-KB-SEQUENCE :FIRST MODULE-COMPLIANCE-GROUP))
+
+(DEFUN MODULE-COMPLIANCE-GROUP+12
+       (MODULE-COMPLIANCE-GROUP MODULE-COMPLIANCE-GROUP+)
+  (MAKE-KB-SEQUENCE :FIRST
+                    MODULE-COMPLIANCE-GROUP
+                    :REST
+                    MODULE-COMPLIANCE-GROUP+))
+
+(DEFUN OBJ-ID-COMPONENTS+13 (OBJ-ID-COMPONENTS)
+  (MAKE-KB-SEQUENCE :FIRST OBJ-ID-COMPONENTS))
+
+(DEFUN OBJ-ID-COMPONENTS+14 (OBJ-ID-COMPONENTS OBJ-ID-COMPONENTS+)
+  (MAKE-KB-SEQUENCE :FIRST OBJ-ID-COMPONENTS :REST OBJ-ID-COMPONENTS+))
+
+(DEFUN NAMED-NUMBER+\,1$15 (NAMED-NUMBER)
+  (MAKE-KB-SEQUENCE :FIRST NAMED-NUMBER))
+
+(DEFUN NAMED-NUMBER+\,1$16 (NAMED-NUMBER DUMMY NAMED-NUMBER+\,1$)
+  (DECLARE (IGNORE DUMMY))
+  (MAKE-KB-SEQUENCE :FIRST NAMED-NUMBER :REST NAMED-NUMBER+\,1$))
+
+(DEFUN GARBAGE*17 (GARBAGE GARBAGE*)
+  (MAKE-KB-SEQUENCE :FIRST GARBAGE :REST GARBAGE*))
+
+(DEFUN OBJECT-IDENTIFIER-VALUE18 (DUMMY OBJ-ID-COMPONENTS+ DUMMY1)
+  (DECLARE (IGNORE DUMMY1 DUMMY))
+  (MAKE-OBJECT-IDENTIFIER-VALUE :VALUE OBJ-ID-COMPONENTS+))
+
+(DEFUN VALUE-ASSIGNMENT19 (VALUE-REFERENCE TYPE DUMMY VALUE)
+  (DECLARE (IGNORE DUMMY))
+  (MAKE-VALUE-ASSIGNMENT :NAME VALUE-REFERENCE :TYPE TYPE :VALUE VALUE))
+
+(DEFUN VALUE-ASSIGNMENT20
+       (VALUE-REFERENCE DUMMY DUMMY1 TYPE DUMMY2 OBJECT-TYPE-ACCESS
+        DUMMY3 OBJECT-TYPE-STATUS DUMMY4 STRING OBJECT-TYPE-INDEX
+        DUMMY5 OBJECT-IDENTIFIER-VALUE)
+  (DECLARE (IGNORE DUMMY5 DUMMY4 DUMMY3 DUMMY2 DUMMY1 DUMMY))
+  (MAKE-OBJECT-TYPE-ASSIGNMENT :NAME
+                               VALUE-REFERENCE
+                               :TYPE
+                               :OBJECT-TYPE
+                               :SYNTAX
+                               TYPE
+                               :MAX-ACCESS
+                               OBJECT-TYPE-ACCESS
+                               :STATUS
+                               OBJECT-TYPE-STATUS
+                               :DESCRIPTION
+                               STRING
+                               :INDEX
+                               OBJECT-TYPE-INDEX
+                               :VALUE
+                               OBJECT-IDENTIFIER-VALUE))
+
+(DEFUN ASSIGNMENT21 (TYPE-ASSIGNMENT)
+  (MAKE-ASSIGNMENT :TYPE :TYPE :VALUE TYPE-ASSIGNMENT))
+
+(DEFUN ASSIGNMENT22 (VALUE-ASSIGNMENT)
+  (MAKE-ASSIGNMENT :TYPE :VALUE :VALUE VALUE-ASSIGNMENT))
+
+(DEFUN SYMBOLS-FROM-MODULE23
+       (SYMBOL+\,1$ DUMMY GLOBAL-MODULE-REFERENCE)
+  (DECLARE (IGNORE DUMMY))
+  (MAKE-SYMBOLS-FROM-MODULE :SYMBOLS
+                            SYMBOL+\,1$
+                            :GLOBAL-MODULE-REFERENCE
+                            GLOBAL-MODULE-REFERENCE))
+
+(DEFUN IMPORTS24 (DUMMY SYMBOLS-FROM-MODULE* DUMMY1)
+  (DECLARE (IGNORE DUMMY1 DUMMY))
+  (MAKE-IMPORTS :VALID T :LIST SYMBOLS-FROM-MODULE*))
+
+(DEFUN EXPORTS25 (DUMMY SYMBOL*\,1$ DUMMY1)
+  (DECLARE (IGNORE DUMMY1 DUMMY))
+  (MAKE-EXPORTS :LIST SYMBOL*\,1$))
+
+(DEFUN EXPORTS26 (DUMMY DUMMY1 DUMMY2)
+  (DECLARE (IGNORE DUMMY2 DUMMY1 DUMMY))
+  (MAKE-EXPORTS :ALL-EXPORTS T))
+
+(DEFUN MODULE-BODY27 (EXPORTS IMPORTS ASSIGNMENT*)
+  (MAKE-MODULE-BODY :ASSIGNMENT-LIST
+                    ASSIGNMENT*
+                    :EXPORTS
+                    EXPORTS
+                    :IMPORTS
+                    IMPORTS))
+
+(DEFUN MODULE-DEFINITION28
+       (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-TOPLEVEL)
+  (UNLESS (MEMBER "zebu-regex" *MODULES* :TEST #'EQUAL)
+    (WARN "Load the Zebu Compiler!")))
+(DECLAIM (SPECIAL ZEBU::*REGEX-GROUPS* ZEBU::*REGEX-GROUPINGS*))
+(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 SIGNED-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))
+                (PROGN
+                  (BLOCK ZEBU::COMPARE
+                    (IF (AND (< ZEBU::INDEX LENGTH)
+                             (EQL (CHAR STRING ZEBU::INDEX) #\-))
+                        (INCF ZEBU::INDEX)
+                      (RETURN-FROM ZEBU::COMPARE NIL)))
+                  T)
+                (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 ANYTHING
+       (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	Wed Sep 19 08:35:54 2007
@@ -0,0 +1,573 @@
+
+(: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" :CASE-SENSITIVE T :LEX-CATS ((TYPE-REFERENCE "[A-Z][a-zA-Z0-9-]*") (SIGNED-NUMBER "-?[0-9]+") (ANYTHING "[^ ]+")) :DOMAIN (KB-DOMAIN :SUBTYPE (OBJECT-IDENTIFIER-VALUE :SLOTS (VALUE)) :SUBTYPE (VALUE-ASSIGNMENT :SLOTS (NAME TYPE VALUE) :SUBTYPE (OBJECT-TYPE-ASSIGNMENT :SLOTS (SYNTAX MAX-ACCESS STATUS DESCRIPTION INDEX))) :SUBTYPE (ASSIGNMENT :SLOTS (TYPE VALUE)) :SUBTYPE (SYMBOLS-FROM-MODULE :SLOTS (SYMBOLS GLOBAL-MODULE-REFERENCE)) :SUBTYPE (IMPORTS :SLOTS ((LIST KB-SEQUENCE) VALID)) :SUBTYPE (EXPORTS :SLOTS ((LIST KB-SEQUENCE) ALL-EXPORTS)) :SUBTYPE (MODULE-BODY :SLOTS (EXPORTS IMPORTS (ASSIGNMENT-LIST KB-SEQUENCE))) :SUBTYPE (MODULE-DEFINITION :SLOTS (IDENTIFIER BODY))) :DOMAIN-FILE "/home/binghe/cl-net-snmp/asn.1/asn.1-domain.lisp")
+#124(ZEBU::THE-EMPTY-STRING ZEBU::AUGMENTED-START ZEBU::THE-END-G-SYMBOL MODULE-DEFINITION MODULE-IDENTIFIER "DEFINITIONS" "::=" "BEGIN" MODULE-BODY "END" MODULE-REFERENCE TYPE-REFERENCE EXPORTS IMPORTS ASSIGNMENT* "EXPORTS" SYMBOL*\,1$ ";" "ALL" SYMBOL REFERENCE "IMPORTS" SYMBOLS-FROM-MODULE* SYMBOLS-FROM-MODULE SYMBOL+\,1$ "FROM" GLOBAL-MODULE-REFERENCE VALUE-REFERENCE IDENTIFIER ASSIGNMENT TYPE-ASSIGNMENT VALUE-ASSIGNMENT TYPE "MACRO" GARBAGE+ GARBAGE ANYTHING VALUE "OBJECT-IDENTITY" "STATUS" "DESCRIPTION" STRING OBJECT-IDENTIFIER-VALUE "MODULE-IDENTITY" "LAST-UPDATED" "ORGANIZATION" "CONTACT-INFO" MODULE-REVISION* "OBJECT-TYPE" "SYNTAX" "MAX-ACCESS" OBJECT-TYPE-ACCESS OBJECT-TYPE-STATUS OBJECT-TYPE-INDEX "NOTIFICATION-TYPE" "NOTIFICATION-GROUP" "NOTIFICATIONS" "{" IDENTIFIER+\,1$ "}" "MODULE-COMPLIANCE" "MODULE" "MANDATORY-GROUPS" MODULE-COMPLIANCE-GROUP+ "OBJECT-GROUP" "OBJECTS" MODULE-REVISION "REVISION" "INDEX" MODULE-COMPLIANCE-GROUP "GROUP" BUILTIN-TYPE NAMED-TYPE OBJECT-IDENTIFIER-TYPE CHOICE-TYPE STRING-TYPE INTEGER-TYPE SEQUENCE-OF-TYPE SEQUENCE-TYPE TEXTUAL-CONVENTION-TYPE TAGGED-TYPE "TEXTUAL-CONVENTION" TEXTUAL-CONVENTION-DISPLAY-HINT TEXTUAL-CONVENTION-REFERENCE "DISPLAY-HINT" "REFERENCE" "OBJECT" "IDENTIFIER" BUILTIN-VALUE OBJ-ID-COMPONENTS+ OBJ-ID-COMPONENTS NAME-AND-NUMBER-FORM NAME-FORM NUMBER-FORM "(" ")" SIGNED-NUMBER "CHOICE" "OCTET" "STRING" STRING-OPTIONS "DisplayString" "SIZE" NUMBERS "|" ".." "INTEGER" NAMED-NUMBER+\,1$ NAMED-NUMBER "SEQUENCE" GARBAGE* "OF" TAG "IMPLICIT" "EXPLICIT" "[" CLASS CLASS-NUMBER "]" "UNIVERSAL" "APPLICATION" "PRIVATE" "," |Rest-SYMBOL*,1$| )
+
+
+#63(5 6 7 9 11 15 17 18 21 25 28 33 36 38 39 40 41 43 44 45 46 48 49 50 54 55 56 57 59 60 61 62 64 65 67 68 70 81 84 85 86 87 94 95 96 97 98 99 101 102 104 105 106 109 111 113 114 115 118 119 120 121 122 )
+
+#108((1 . 1)(3 . 6)(4 . 1)(10 . 1)(8 . 3)(8 . 0)(12 . 3)(12 . 3)(12 . 0)(19 . 1)(13 . 3)(13 . 0)(23 . 3)(26 . 1)(20 . 1)(20 . 1)(27 . 1)(29 . 1)(29 . 1)(30 . 3)(30 . 6)(35 . 1)(31 . 4)(31 . 8)(31 . 13)(31 . 13)(31 . 8)(31 . 12)(31 . 14)(31 . 12)(51 . 1)(52 . 1)(66 . 4)(53 . 2)(53 . 0)(69 . 4)(32 . 1)(32 . 1)(71 . 1)(71 . 1)(71 . 1)(71 . 1)(71 . 1)(71 . 1)(71 . 1)(71 . 1)(72 . 1)(79 . 9)(82 . 2)(82 . 0)(83 . 2)(83 . 0)(73 . 2)(37 . 1)(88 . 1)(42 . 3)(90 . 1)(90 . 1)(90 . 1)(91 . 4)(92 . 1)(93 . 1)(74 . 4)(75 . 3)(75 . 2)(100 . 6)(100 . 0)(103 . 3)(103 . 3)(103 . 1)(76 . 6)(76 . 4)(108 . 4)(78 . 4)(77 . 3)(80 . 2)(80 . 3)(80 . 3)(112 . 4)(117 . 1)(116 . 1)(116 . 1)(116 . 1)(116 . 0)(110 . 0)(110 . 2)(107 . 1)(107 . 3)(89 . 1)(89 . 2)(63 . 1)(63 . 2)(58 . 1)(58 . 3)(47 . 0)(47 . 2)(34 . 1)(34 . 2)(24 . 1)(24 . 3)(22 . 0)(22 . 2)(123 . 0)(123 . 3)(16 . 0)(16 . 2)(14 . 0)(14 . 2))
+
+#249(
+((11 :S 9))
+((2 :A 0))
+((5 :S 3))
+((6 :S 4))
+((7 :S 5))
+((9 :R 5) (11 :R 8) (15 :S 235) (21 :R 8) (28 :R 8))
+((9 :S 7))
+((2 :R 1))
+((5 :R 2))
+((5 :R 3) (11 :R 3) (17 :R 3) (28 :R 3))
+((9 :R 11) (11 :R 11) (21 :S 18) (28 :R 11))
+((9 :R 106) (11 :S 236) (28 :S 27))
+((9 :R 4))
+((17 :S 14))
+((9 :R 6) (11 :R 6) (21 :R 6) (28 :R 6))
+((17 :S 16))
+((9 :R 7) (11 :R 7) (21 :R 7) (28 :R 7))
+((17 :R 9) (25 :R 9) (122 :R 9))
+((11 :S 25) (17 :R 100) (28 :S 27))
+((17 :S 20))
+((9 :R 10) (11 :R 10) (28 :R 10))
+((25 :S 22))
+((11 :S 9))
+((11 :R 12) (17 :R 12) (28 :R 12))
+((11 :R 13) (17 :R 13) (28 :R 13))
+((17 :R 14) (25 :R 14) (122 :R 14))
+((17 :R 15) (25 :R 15) (122 :R 15))
+((11 :R 16) (17 :R 16) (25 :R 16) (38 :R 16) (43 :R 16) (48 :R 16) (54 :R 16) (55 :R 16) (60 :R 16) (64 :R 16) (81 :R 16) (86 :R 16) (97 :R 16) (98 :R 16) (101 :R 16) (106 :R 16) (109 :R 16) (115 :R 16) (122 :R 16))
+((9 :R 17) (11 :R 17) (28 :R 17))
+((9 :R 18) (11 :R 18) (28 :R 18))
+((11 :S 136) (81 :S 137) (86 :S 150) (97 :S 164) (98 :S 168) (101 :S 171) (106 :S 238) (109 :S 239) (115 :S 205))
+((9 :R 19) (11 :R 19) (28 :R 19))
+((6 :S 33))
+((7 :S 34))
+((36 :S 37))
+((9 :S 36))
+((9 :R 20) (11 :R 20) (28 :R 20))
+((9 :R 21) (36 :R 21) (59 :R 21))
+((6 :S 39))
+((57 :S 154))
+((9 :R 22) (11 :R 22) (28 :R 22))
+((39 :S 42))
+((28 :S 43))
+((40 :S 44))
+((41 :S 45))
+((6 :S 46))
+((57 :S 154))
+((9 :R 23) (11 :R 23) (28 :R 23))
+((44 :S 49))
+((41 :S 50))
+((45 :S 51))
+((41 :S 52))
+((46 :S 53))
+((41 :S 54))
+((40 :S 55))
+((41 :S 56))
+((6 :R 94) (67 :S 116))
+((6 :S 58))
+((57 :S 154))
+((9 :R 24) (11 :R 24) (28 :R 24))
+((49 :S 61))
+((11 :S 136) (81 :S 137) (86 :S 150) (97 :S 164) (98 :S 168) (101 :S 171) (106 :S 238) (109 :S 239) (115 :S 205))
+((50 :S 63))
+((28 :S 114))
+((39 :S 65))
+((28 :S 115))
+((40 :S 67))
+((41 :S 68))
+((6 :R 34) (68 :S 120))
+((6 :S 70))
+((57 :S 154))
+((9 :R 25) (11 :R 25) (28 :R 25))
+((39 :S 73))
+((28 :S 74))
+((40 :S 75))
+((41 :S 76))
+((6 :S 77))
+((57 :S 154))
+((9 :R 26) (11 :R 26) (28 :R 26))
+((56 :S 80))
+((57 :S 81))
+((28 :S 243))
+((59 :S 83))
+((39 :S 84))
+((28 :S 85))
+((40 :S 86))
+((41 :S 87))
+((6 :S 88))
+((57 :S 154))
+((9 :R 27) (11 :R 27) (28 :R 27))
+((39 :S 91))
+((28 :S 92))
+((40 :S 93))
+((41 :S 94))
+((61 :S 95))
+((62 :S 96))
+((57 :S 97))
+((28 :S 243))
+((59 :S 99))
+((70 :S 122))
+((6 :S 101))
+((57 :S 154))
+((9 :R 28) (11 :R 28) (28 :R 28))
+((65 :S 104))
+((57 :S 105))
+((28 :S 243))
+((59 :S 107))
+((39 :S 108))
+((28 :S 109))
+((40 :S 110))
+((41 :S 111))
+((6 :S 112))
+((57 :S 154))
+((9 :R 29) (11 :R 29) (28 :R 29))
+((39 :R 30))
+((40 :R 31))
+((41 :S 117))
+((40 :S 118))
+((41 :S 119))
+((6 :R 32) (67 :R 32))
+((57 :S 154))
+((6 :R 33))
+((28 :S 123))
+((40 :S 124))
+((41 :S 125))
+((6 :R 35) (70 :R 35))
+((6 :R 36) (9 :R 36) (11 :R 36) (28 :R 36) (50 :R 36))
+((6 :R 37) (9 :R 37) (11 :R 37) (28 :R 37) (50 :R 37))
+((6 :R 38) (9 :R 38) (11 :R 38) (28 :R 38) (50 :R 38))
+((6 :R 39) (9 :R 39) (11 :R 39) (28 :R 39) (50 :R 39))
+((6 :R 40) (9 :R 40) (11 :R 40) (28 :R 40) (50 :R 40))
+((6 :R 41) (9 :R 41) (11 :R 41) (28 :R 41) (50 :R 41))
+((6 :R 42) (9 :R 42) (11 :R 42) (28 :R 42) (50 :R 42))
+((6 :R 43) (9 :R 43) (11 :R 43) (28 :R 43) (50 :R 43))
+((6 :R 44) (9 :R 44) (11 :R 44) (28 :R 44) (50 :R 44))
+((6 :R 45) (9 :R 45) (11 :R 45) (28 :R 45) (50 :R 45))
+((6 :R 46) (9 :R 46) (11 :R 46) (28 :R 46) (50 :R 46))
+((39 :R 49) (84 :S 146))
+((39 :S 139))
+((28 :S 140))
+((40 :S 141))
+((41 :S 142))
+((49 :R 51) (85 :S 148))
+((49 :S 144))
+((11 :S 136) (81 :S 137) (86 :S 150) (97 :S 164) (98 :S 168) (101 :S 171) (106 :S 238) (109 :S 239) (115 :S 205))
+((6 :R 47) (9 :R 47) (11 :R 47) (28 :R 47) (50 :R 47))
+((41 :S 147))
+((39 :R 48))
+((41 :S 149))
+((49 :R 50))
+((87 :S 151))
+((6 :R 52) (9 :R 52) (11 :R 52) (28 :R 52) (50 :R 52))
+((9 :R 53) (11 :R 53) (28 :R 53))
+((9 :R 54) (11 :R 54) (28 :R 54))
+((28 :S 237) (96 :S 163))
+((59 :S 156))
+((6 :R 55) (9 :R 55) (11 :R 55) (28 :R 55))
+((28 :R 56) (59 :R 56) (96 :R 56))
+((28 :R 57) (59 :R 57) (96 :R 57))
+((28 :R 58) (59 :R 58) (96 :R 58))
+((96 :S 163))
+((95 :S 162))
+((28 :R 59) (59 :R 59) (96 :R 59))
+((28 :R 61) (59 :R 61) (95 :R 61) (96 :R 61))
+((57 :S 165))
+((36 :S 37))
+((59 :S 167))
+((6 :R 62) (9 :R 62) (11 :R 62) (28 :R 62) (50 :R 62))
+((99 :S 169))
+((6 :R 66) (9 :R 66) (11 :R 66) (28 :R 66) (50 :R 66) (94 :S 173))
+((6 :R 63) (9 :R 63) (11 :R 63) (28 :R 63) (50 :R 63))
+((6 :R 66) (9 :R 66) (11 :R 66) (28 :R 66) (50 :R 66) (94 :S 173))
+((6 :R 64) (9 :R 64) (11 :R 64) (28 :R 64) (50 :R 64))
+((102 :S 174))
+((94 :S 175))
+((96 :S 246))
+((95 :S 177))
+((95 :S 178))
+((6 :R 65) (9 :R 65) (11 :R 65) (28 :R 65) (50 :R 65))
+((96 :S 180))
+((95 :R 67))
+((96 :S 182))
+((95 :R 68))
+((96 :S 184))
+((105 :S 185))
+((96 :S 186))
+((95 :S 187))
+((6 :R 70) (9 :R 70) (11 :R 70) (28 :R 70) (50 :R 70))
+((28 :S 191))
+((59 :S 190))
+((6 :R 71) (9 :R 71) (11 :R 71) (28 :R 71) (50 :R 71))
+((94 :S 192))
+((96 :S 193))
+((95 :S 194))
+((59 :R 72) (122 :R 72))
+((36 :S 37) (59 :R 84))
+((59 :S 197))
+((6 :R 73) (9 :R 73) (11 :R 73) (28 :R 73) (50 :R 73))
+((11 :S 136) (81 :S 137) (86 :S 150) (97 :S 164) (98 :S 168) (101 :S 171) (106 :S 238) (109 :S 239) (115 :S 205))
+((6 :R 74) (9 :R 74) (11 :R 74) (28 :R 74) (50 :R 74))
+((6 :R 75) (9 :R 75) (11 :R 75) (28 :R 75) (50 :R 75))
+((11 :S 136) (81 :S 137) (86 :S 150) (97 :S 164) (98 :S 168) (101 :S 171) (106 :S 238) (109 :S 239) (115 :S 205))
+((6 :R 76) (9 :R 76) (11 :R 76) (28 :R 76) (50 :R 76))
+((11 :S 136) (81 :S 137) (86 :S 150) (97 :S 164) (98 :S 168) (101 :S 171) (106 :S 238) (109 :S 239) (115 :S 205))
+((6 :R 77) (9 :R 77) (11 :R 77) (28 :R 77) (50 :R 77))
+((96 :R 83) (119 :S 210) (120 :S 211) (121 :S 212))
+((96 :S 209))
+((118 :S 208))
+((11 :R 78) (81 :R 78) (86 :R 78) (97 :R 78) (98 :R 78) (101 :R 78) (106 :R 78) (109 :R 78) (113 :R 78) (114 :R 78) (115 :R 78))
+((118 :R 79))
+((96 :R 80))
+((96 :R 81))
+((96 :R 82))
+((36 :S 37) (59 :R 84))
+((59 :R 85))
+((28 :S 191))
+((59 :R 87))
+((59 :R 89))
+((6 :R 91))
+((28 :S 243))
+((59 :R 93))
+((6 :R 94) (67 :S 116))
+((6 :R 95))
+((9 :R 97) (59 :R 97))
+((11 :S 25) (28 :S 27))
+((25 :R 99))
+((11 :S 25) (17 :R 100) (28 :S 27))
+((17 :R 101))
+((11 :S 25) (28 :S 27))
+((17 :R 102) (122 :S 228))
+((17 :R 103))
+((17 :R 102) (122 :S 228))
+((17 :R 105))
+((9 :R 106) (11 :S 236) (28 :S 27))
+((9 :R 107))
+((11 :S 25) (17 :R 104) (18 :S 15) (28 :S 27))
+((6 :S 30) (33 :S 32))
+((28 :R 60) (59 :R 60) (94 :S 160) (96 :R 60))
+((57 :S 188) (94 :S 183))
+((57 :S 195) (111 :S 198))
+((59 :R 86) (122 :S 215))
+((28 :S 237) (59 :R 88) (96 :S 163))
+((6 :R 90) (70 :S 122))
+((59 :R 92) (122 :S 219))
+((9 :R 96) (36 :S 37) (59 :R 96))
+((25 :R 98) (122 :S 224))
+((95 :R 69) (104 :S 179) (105 :S 181))
+((11 :S 136) (81 :S 137) (86 :S 150) (97 :S 164) (98 :S 168) (101 :S 171) (106 :S 238) (109 :S 239) (113 :S 201) (114 :S 203) (115 :S 205))
+((11 :S 136) (38 :S 41) (43 :S 48) (48 :S 60) (54 :S 72) (55 :S 79) (60 :S 90) (64 :S 103) (81 :S 137) (86 :S 150) (97 :S 164) (98 :S 168) (101 :S 171) (106 :S 238) (109 :S 239) (115 :S 205)))
+
+#249(
+((3 . 1)(4 . 2)(10 . 8))
+()
+()
+()
+()
+((8 . 6)(12 . 10))
+()
+()
+()
+()
+((13 . 11))
+((14 . 12)(27 . 248)(29 . 233)(30 . 28)(31 . 29))
+()
+()
+()
+()
+()
+()
+((19 . 245)(20 . 17)(22 . 19)(23 . 226)(24 . 21)(27 . 26))
+()
+()
+()
+((10 . 24)(26 . 23))
+()
+()
+()
+()
+()
+()
+()
+((32 . 31)(71 . 126)(72 . 127)(73 . 128)(74 . 129)(75 . 130)(76 . 131)(77 . 132)(78 . 133)(79 . 134)(80 . 135)(112 . 247))
+()
+()
+()
+((34 . 35)(35 . 244))
+()
+()
+()
+()
+((37 . 40)(42 . 153)(88 . 152))
+()
+()
+()
+()
+()
+()
+((42 . 47))
+()
+()
+()
+()
+()
+()
+()
+()
+()
+((47 . 57)(66 . 221))
+()
+((42 . 59))
+()
+()
+((32 . 62)(71 . 126)(72 . 127)(73 . 128)(74 . 129)(75 . 130)(76 . 131)(77 . 132)(78 . 133)(79 . 134)(80 . 135)(112 . 247))
+()
+((51 . 64))
+()
+((52 . 66))
+()
+()
+((53 . 69))
+()
+((42 . 71))
+()
+()
+()
+()
+()
+()
+((42 . 78))
+()
+()
+()
+((58 . 82))
+()
+()
+()
+()
+()
+()
+((42 . 89))
+()
+()
+()
+()
+()
+()
+()
+()
+((58 . 98))
+()
+((63 . 100)(69 . 242))
+()
+((42 . 102))
+()
+()
+()
+((58 . 106))
+()
+()
+()
+()
+()
+()
+((42 . 113))
+()
+()
+()
+()
+()
+()
+()
+((42 . 121))
+()
+()
+()
+()
+()
+()
+()
+()
+()
+()
+()
+()
+()
+()
+()
+()
+((82 . 138))
+()
+()
+()
+()
+((83 . 143))
+()
+((32 . 145)(71 . 126)(72 . 127)(73 . 128)(74 . 129)(75 . 130)(76 . 131)(77 . 132)(78 . 133)(79 . 134)(80 . 135)(112 . 247))
+()
+()
+()
+()
+()
+()
+()
+()
+()
+((89 . 155)(90 . 241)(91 . 157)(92 . 158)(93 . 159))
+()
+()
+()
+()
+()
+((93 . 161))
+()
+()
+()
+()
+((34 . 166)(35 . 244))
+()
+()
+()
+((100 . 170))
+()
+((100 . 172))
+()
+()
+()
+((103 . 176))
+()
+()
+()
+()
+()
+()
+()
+()
+()
+()
+()
+()
+((107 . 189)(108 . 240))
+()
+()
+()
+()
+()
+()
+((35 . 213)(110 . 196))
+()
+()
+((32 . 199)(71 . 126)(72 . 127)(73 . 128)(74 . 129)(75 . 130)(76 . 131)(77 . 132)(78 . 133)(79 . 134)(80 . 135)(112 . 247))
+()
+()
+((32 . 202)(71 . 126)(72 . 127)(73 . 128)(74 . 129)(75 . 130)(76 . 131)(77 . 132)(78 . 133)(79 . 134)(80 . 135)(112 . 247))
+()
+((32 . 204)(71 . 126)(72 . 127)(73 . 128)(74 . 129)(75 . 130)(76 . 131)(77 . 132)(78 . 133)(79 . 134)(80 . 135)(112 . 247))
+()
+((116 . 206))
+((117 . 207))
+()
+()
+()
+()
+()
+()
+((35 . 213)(110 . 214))
+()
+((107 . 216)(108 . 240))
+()
+()
+()
+((58 . 220))
+()
+((47 . 222)(66 . 221))
+()
+()
+((19 . 245)(20 . 17)(24 . 225)(27 . 26))
+()
+((19 . 245)(20 . 17)(22 . 227)(23 . 226)(24 . 21)(27 . 26))
+()
+((19 . 229)(20 . 17)(27 . 26))
+((123 . 230))
+()
+((123 . 232))
+()
+((14 . 234)(27 . 248)(29 . 233)(30 . 28)(31 . 29))
+()
+((16 . 13)(19 . 231)(20 . 17)(27 . 26))
+()
+()
+()
+()
+()
+((89 . 217)(90 . 241)(91 . 157)(92 . 158)(93 . 159))
+((63 . 218)(69 . 242))
+()
+((34 . 223)(35 . 244))
+()
+()
+((32 . 200)(71 . 126)(72 . 127)(73 . 128)(74 . 129)(75 . 130)(76 . 131)(77 . 132)(78 . 133)(79 . 134)(80 . 135)(112 . 247))
+((32 . 38)(71 . 126)(72 . 127)(73 . 128)(74 . 129)(75 . 130)(76 . 131)(77 . 132)(78 . 133)(79 . 134)(80 . 135)(112 . 247)))
+0 
+
+2 
+
+#58((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-DEFINITION28))))
+(MODULE-IDENTIFIER . #S(ZEBU::ZB-RULE :-NAME MODULE-IDENTIFIER :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (MODULE-REFERENCE) :-SEMANTICS NIL :-BUILD-FN IDENTITY))))
+(MODULE-REFERENCE . #S(ZEBU::ZB-RULE :-NAME MODULE-REFERENCE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (TYPE-REFERENCE) :-SEMANTICS NIL :-BUILD-FN IDENTITY))))
+(MODULE-BODY . #S(ZEBU::ZB-RULE :-NAME MODULE-BODY :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (EXPORTS IMPORTS ASSIGNMENT*) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE MODULE-BODY :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL ASSIGNMENT-LIST :-VALUE ASSIGNMENT*) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL EXPORTS :-VALUE EXPORTS) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL IMPORTS :-VALUE IMPORTS))) :-BUILD-FN MODULE-BODY27) #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" SYMBOL*\,1$ ";") :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE EXPORTS :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL LIST :-VALUE SYMBOL*\,1$))) :-BUILD-FN EXPORTS25) #S(ZEBU::PRODUCTION-RHS :-SYNTAX ("EXPORTS" "ALL" ";") :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE EXPORTS :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL ALL-EXPORTS :-VALUE T))) :-BUILD-FN EXPORTS26) #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 ("IMPORTS" SYMBOLS-FROM-MODULE* ";") :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE IMPORTS :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL VALID :-VALUE T) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL LIST :-VALUE SYMBOLS-FROM-MODULE*))) :-BUILD-FN IMPORTS24) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(SYMBOLS-FROM-MODULE . #S(ZEBU::ZB-RULE :-NAME SYMBOLS-FROM-MODULE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (SYMBOL+\,1$ "FROM" GLOBAL-MODULE-REFERENCE) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE SYMBOLS-FROM-MODULE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL SYMBOLS :-VALUE SYMBOL+\,1$) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL GLOBAL-MODULE-REFERENCE :-VALUE GLOBAL-MODULE-REFERENCE))) :-BUILD-FN SYMBOLS-FROM-MODULE23))))
+(GLOBAL-MODULE-REFERENCE . #S(ZEBU::ZB-RULE :-NAME GLOBAL-MODULE-REFERENCE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (MODULE-REFERENCE) :-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))))
+(VALUE-REFERENCE . #S(ZEBU::ZB-RULE :-NAME VALUE-REFERENCE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (IDENTIFIER) :-SEMANTICS NIL :-BUILD-FN IDENTITY))))
+(ASSIGNMENT . #S(ZEBU::ZB-RULE :-NAME ASSIGNMENT :-PRODUCTIONS (#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 ASSIGNMENT21) #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 ASSIGNMENT22))))
+(TYPE-ASSIGNMENT . #S(ZEBU::ZB-RULE :-NAME TYPE-ASSIGNMENT :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (TYPE-REFERENCE "::=" TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (TYPE-REFERENCE "MACRO" "::=" "BEGIN" GARBAGE+ "END") :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(GARBAGE . #S(ZEBU::ZB-RULE :-NAME GARBAGE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (ANYTHING) :-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 #S(ZEBU::FEAT-TERM :-TYPE VALUE-ASSIGNMENT :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL NAME :-VALUE VALUE-REFERENCE) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL TYPE :-VALUE TYPE) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL VALUE :-VALUE VALUE))) :-BUILD-FN VALUE-ASSIGNMENT19) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (VALUE-REFERENCE "OBJECT-IDENTITY" "STATUS" IDENTIFIER "DESCRIPTION" STRING "::=" OBJECT-IDENTIFIER-VALUE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (VALUE-REFERENCE "MODULE-IDENTITY" "LAST-UPDATED" STRING "ORGANIZATION" STRING "CONTACT-INFO" STRING "DESCRIPTION" STRING MODULE-REVISION* "::=" OBJECT-IDENTIFIER-VALUE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (VALUE-REFERENCE "OBJECT-TYPE" "SYNTAX" TYPE "MAX-ACCESS" OBJECT-TYPE-ACCESS "STATUS" OBJECT-TYPE-STATUS "DESCRIPTION" STRING OBJECT-TYPE-INDEX "::=" OBJECT-IDENTIFIER-VALUE) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE OBJECT-TYPE-ASSIGNMENT :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL NAME :-VALUE VALUE-REFERENCE) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL TYPE :-VALUE :OBJECT-TYPE) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL SYNTAX :-VALUE TYPE) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL MAX-ACCESS :-VALUE OBJECT-TYPE-ACCESS) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL STATUS :-VALUE OBJECT-TYPE-STATUS) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL DESCRIPTION :-VALUE STRING) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL INDEX :-VALUE OBJECT-TYPE-INDEX) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL VALUE :-VALUE OBJECT-IDENTIFIER-VALUE))) :-BUILD-FN VALUE-ASSIGNMENT20) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (VALUE-REFERENCE "NOTIFICATION-TYPE" "STATUS" IDENTIFIER "DESCRIPTION" STRING "::=" OBJECT-IDENTIFIER-VALUE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (VALUE-REFERENCE "NOTIFICATION-GROUP" "NOTIFICATIONS" "{" IDENTIFIER+\,1$ "}" "STATUS" IDENTIFIER "DESCRIPTION" STRING "::=" OBJECT-IDENTIFIER-VALUE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (VALUE-REFERENCE "MODULE-COMPLIANCE" "STATUS" IDENTIFIER "DESCRIPTION" STRING "MODULE" "MANDATORY-GROUPS" "{" IDENTIFIER+\,1$ "}" MODULE-COMPLIANCE-GROUP+ "::=" OBJECT-IDENTIFIER-VALUE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (VALUE-REFERENCE "OBJECT-GROUP" "OBJECTS" "{" IDENTIFIER+\,1$ "}" "STATUS" IDENTIFIER "DESCRIPTION" STRING "::=" OBJECT-IDENTIFIER-VALUE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(OBJECT-TYPE-ACCESS . #S(ZEBU::ZB-RULE :-NAME OBJECT-TYPE-ACCESS :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (IDENTIFIER) :-SEMANTICS NIL :-BUILD-FN IDENTITY))))
+(OBJECT-TYPE-STATUS . #S(ZEBU::ZB-RULE :-NAME OBJECT-TYPE-STATUS :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (IDENTIFIER) :-SEMANTICS NIL :-BUILD-FN IDENTITY))))
+(MODULE-REVISION . #S(ZEBU::ZB-RULE :-NAME MODULE-REVISION :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("REVISION" STRING "DESCRIPTION" STRING) :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(OBJECT-TYPE-INDEX . #S(ZEBU::ZB-RULE :-NAME OBJECT-TYPE-INDEX :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("INDEX" OBJECT-IDENTIFIER-VALUE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(MODULE-COMPLIANCE-GROUP . #S(ZEBU::ZB-RULE :-NAME MODULE-COMPLIANCE-GROUP :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("GROUP" IDENTIFIER "DESCRIPTION" STRING) :-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) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (NAMED-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 (STRING-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (INTEGER-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (SEQUENCE-OF-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (SEQUENCE-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (TEXTUAL-CONVENTION-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (TAGGED-TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY))))
+(NAMED-TYPE . #S(ZEBU::ZB-RULE :-NAME NAMED-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (TYPE-REFERENCE) :-SEMANTICS NIL :-BUILD-FN IDENTITY))))
+(TEXTUAL-CONVENTION-TYPE . #S(ZEBU::ZB-RULE :-NAME TEXTUAL-CONVENTION-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("TEXTUAL-CONVENTION" TEXTUAL-CONVENTION-DISPLAY-HINT "STATUS" IDENTIFIER "DESCRIPTION" STRING TEXTUAL-CONVENTION-REFERENCE "SYNTAX" TYPE) :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(TEXTUAL-CONVENTION-DISPLAY-HINT . #S(ZEBU::ZB-RULE :-NAME TEXTUAL-CONVENTION-DISPLAY-HINT :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("DISPLAY-HINT" STRING) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(TEXTUAL-CONVENTION-REFERENCE . #S(ZEBU::ZB-RULE :-NAME TEXTUAL-CONVENTION-REFERENCE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("REFERENCE" STRING) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-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+ "}") :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE OBJECT-IDENTIFIER-VALUE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL VALUE :-VALUE OBJ-ID-COMPONENTS+))) :-BUILD-FN OBJECT-IDENTIFIER-VALUE18))))
+(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 (SIGNED-NUMBER) :-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*))))
+(STRING-TYPE . #S(ZEBU::ZB-RULE :-NAME STRING-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("OCTET" "STRING" STRING-OPTIONS) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX ("DisplayString" STRING-OPTIONS) :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(STRING-OPTIONS . #S(ZEBU::ZB-RULE :-NAME STRING-OPTIONS :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("(" "SIZE" "(" NUMBERS ")" ")") :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(NUMBERS . #S(ZEBU::ZB-RULE :-NAME NUMBERS :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (SIGNED-NUMBER "|" SIGNED-NUMBER) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (SIGNED-NUMBER ".." SIGNED-NUMBER) :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (SIGNED-NUMBER) :-SEMANTICS NIL :-BUILD-FN IDENTITY))))
+(INTEGER-TYPE . #S(ZEBU::ZB-RULE :-NAME INTEGER-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("INTEGER" "(" SIGNED-NUMBER ".." SIGNED-NUMBER ")") :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX ("INTEGER" "{" NAMED-NUMBER+\,1$ "}") :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(NAMED-NUMBER . #S(ZEBU::ZB-RULE :-NAME NAMED-NUMBER :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (IDENTIFIER "(" SIGNED-NUMBER ")") :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(SEQUENCE-TYPE . #S(ZEBU::ZB-RULE :-NAME SEQUENCE-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("SEQUENCE" "{" GARBAGE* "}") :-SEMANTICS NIL :-BUILD-FN IDENTITY*))))
+(SEQUENCE-OF-TYPE . #S(ZEBU::ZB-RULE :-NAME SEQUENCE-OF-TYPE :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX ("SEQUENCE" "OF" TYPE) :-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 (SIGNED-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 NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #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*17))))
+(NAMED-NUMBER+\,1$ . #S(ZEBU::ZB-RULE :-NAME NAMED-NUMBER+\,1$ :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (NAMED-NUMBER) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE NAMED-NUMBER))) :-BUILD-FN NAMED-NUMBER+\,1$15) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (NAMED-NUMBER "," NAMED-NUMBER+\,1$) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE NAMED-NUMBER) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL REST :-VALUE NAMED-NUMBER+\,1$))) :-BUILD-FN NAMED-NUMBER+\,1$16))))
+(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+13) #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+14))))
+(MODULE-COMPLIANCE-GROUP+ . #S(ZEBU::ZB-RULE :-NAME MODULE-COMPLIANCE-GROUP+ :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (MODULE-COMPLIANCE-GROUP) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE MODULE-COMPLIANCE-GROUP))) :-BUILD-FN MODULE-COMPLIANCE-GROUP+11) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (MODULE-COMPLIANCE-GROUP MODULE-COMPLIANCE-GROUP+) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE MODULE-COMPLIANCE-GROUP) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL REST :-VALUE MODULE-COMPLIANCE-GROUP+))) :-BUILD-FN MODULE-COMPLIANCE-GROUP+12))))
+(IDENTIFIER+\,1$ . #S(ZEBU::ZB-RULE :-NAME IDENTIFIER+\,1$ :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX (IDENTIFIER) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE IDENTIFIER))) :-BUILD-FN IDENTIFIER+\,1$9) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (IDENTIFIER "," IDENTIFIER+\,1$) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE IDENTIFIER) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL REST :-VALUE IDENTIFIER+\,1$))) :-BUILD-FN IDENTIFIER+\,1$10))))
+(MODULE-REVISION* . #S(ZEBU::ZB-RULE :-NAME MODULE-REVISION* :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (MODULE-REVISION MODULE-REVISION*) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE MODULE-REVISION) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL REST :-VALUE MODULE-REVISION*))) :-BUILD-FN MODULE-REVISION*8))))
+(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+6) #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+7))))
+(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$4) #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$5))))
+(SYMBOLS-FROM-MODULE* . #S(ZEBU::ZB-RULE :-NAME SYMBOLS-FROM-MODULE* :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (SYMBOLS-FROM-MODULE SYMBOLS-FROM-MODULE*) :-SEMANTICS #S(ZEBU::FEAT-TERM :-TYPE KB-SEQUENCE :-SLOTS (#S(ZEBU::LABEL-VALUE-PAIR :-LABEL FIRST :-VALUE SYMBOLS-FROM-MODULE) #S(ZEBU::LABEL-VALUE-PAIR :-LABEL REST :-VALUE SYMBOLS-FROM-MODULE*))) :-BUILD-FN SYMBOLS-FROM-MODULE*3))))
+(|Rest-SYMBOL*,1$| . #S(ZEBU::ZB-RULE :-NAME |Rest-SYMBOL*,1$| :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX ("," SYMBOL |Rest-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 |Rest-SYMBOL*,1$|))) :-BUILD-FN |Rest-SYMBOL*,1$2|))))
+(SYMBOL*\,1$ . #S(ZEBU::ZB-RULE :-NAME SYMBOL*\,1$ :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #S(ZEBU::PRODUCTION-RHS :-SYNTAX (SYMBOL |Rest-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 |Rest-SYMBOL*,1$|))) :-BUILD-FN SYMBOL*\,1$1))))
+(ASSIGNMENT* . #S(ZEBU::ZB-RULE :-NAME ASSIGNMENT* :-PRODUCTIONS (#S(ZEBU::PRODUCTION-RHS :-SYNTAX NIL :-SEMANTICS NIL :-BUILD-FN IDENTITY*) #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*0))))
+)
\ No newline at end of file

Modified: trunk/asn.1/ber.lisp
==============================================================================
--- trunk/asn.1/ber.lisp	(original)
+++ trunk/asn.1/ber.lisp	Wed Sep 19 08:35:54 2007
@@ -127,88 +127,27 @@
     (read-byte stream))
   nil)
 
-;;;;;;;;;;;;;;;;;;;;;;;
-;;;; Special Types ;;;;
-;;;;;;;;;;;;;;;;;;;;;;;
+;;;; Test Code
 
-;;; Integer (:integer)
-
-(defmethod ber-encode ((value integer))
-  (assert (<= 0 value))
-  (labels ((iter (n 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)
-      (nconc (ber-encode-type 0 0 2)
-             (ber-encode-length l)
-             v))))
-
-(defmethod ber-decode-value ((stream stream) (type (eql :integer)) length)
-  (declare (type stream stream)
-           (type fixnum length)
-           (ignore type))
-  (labels ((iter (i acc)
-             (if (= i length) acc
-               (iter (1+ i) (logior (ash acc 8) (read-byte stream))))))
-    (iter 0 0)))
-
-;;; OCTET STRING (:octet-string)
-
-(defmethod ber-encode ((value simple-base-string))
-  (nconc (ber-encode-type 0 0 4)
-         (ber-encode-length (length value))
-         (map 'list #'char-code value)))
-
-(defmethod ber-decode-value ((stream stream) (type (eql :octet-string)) length)
-  (declare (type stream stream)
-           (type fixnum length)
-           (ignore type))
-  (let ((str (make-string length)))
-    (map-into str #'(lambda () (code-char (read-byte stream))))))
-
-;;; SEQUENCE (:sequence)
-
-(defmethod ber-encode ((value sequence))
-  (let ((sub-encode (apply #'nconc
-                           (map 'list #'ber-encode value))))
-    (nconc (ber-encode-type 0 1 16)
-           (ber-encode-length (length sub-encode))
-           sub-encode)))
-
-(defmethod ber-decode-value ((stream stream) (type (eql :sequence)) length)
-  (declare (type stream stream)
-           (type fixnum length)
-           (ignore type))
-  (labels ((iter (length-left acc)
-             (if (zerop length-left)
-                 (nreverse acc)
-               (multiple-value-bind (sub-type sub-type-length)
-                   (ber-decode-type stream)
-                 (multiple-value-bind (sub-length sub-length-length)
-                     (ber-decode-length stream)
-                   (iter (- length-left
-                            sub-type-length
-                            sub-length-length
-                            sub-length)
-                         (cons (ber-decode-value stream sub-type sub-length) acc)))))))
-    (iter length nil)))
-
-;;; NULL (:null)
-(defmethod ber-encode ((value (eql nil)))
-  (declare (ignore value))
-  (nconc (ber-encode-type 0 0 5)
-         (ber-encode-length 0)))
-
-(defmethod ber-decode-value ((stream stream) (type (eql :null)) length)
-  (declare (type stream stream)
-           (type fixnum length)
-           (ignore type))
-  (assert (zerop length))
-  nil)
-
-(eval-when (:load-toplevel :execute)
-  (install-asn.1-type :integer 0 0 2)
-  (install-asn.1-type :octet-string 0 0 4)
-  (install-asn.1-type :null 0 0 5)
-  (install-asn.1-type :sequence 0 1 16))
+(defclass ber-stream (fundamental-input-stream)
+  ((sequence :type sequence :initarg :seq :reader ber-sequence)
+   (length :type integer :accessor ber-length)
+   (position :type integer :initform 0 :accessor ber-position)))
+
+(defmethod shared-initialize :after ((instance ber-stream) slot-names &rest initargs)
+  (declare (ignore slot-names initargs))
+  (setf (ber-length instance) (length (ber-sequence instance))))
+
+(defmethod stream-read-byte ((instance ber-stream))
+  (if (= (ber-position instance) (ber-length instance))
+      :eof
+    (let ((byte (elt (ber-sequence instance) (ber-position instance))))
+      (incf (ber-position instance))
+      byte)))
+
+(defun ber-test (x)
+  (let ((code (ber-encode x)))
+    (format t "~A -> ~A~%~{~8,'0B ~}~%~{~D ~}~%"
+            x (ber-decode (make-instance 'ber-stream :seq code))
+            code code)
+    x))

Modified: trunk/asn.1/mib-parse.lisp
==============================================================================
--- trunk/asn.1/mib-parse.lisp	(original)
+++ trunk/asn.1/mib-parse.lisp	Wed Sep 19 08:35:54 2007
@@ -1,16 +1,2 @@
 (in-package :asn.1)
 
-(defun parse-oid-def (syntax-tree)
-  (let ((module (car syntax-tree)))
-    (let ((assignment-list (Module-Body-assignment-list
-			    (Module-Definition-body module))))
-      (labels ((iter (kb-seq acc)
-		 (if (null (kb-sequence-rest kb-seq))
- 		     (nreverse (cons (kb-sequence-first kb-seq) acc))
-		     (iter (kb-sequence-rest kb-seq)
-			   (cons (kb-sequence-first kb-seq) acc)))))
-	(mapcar #'cdr
-		(delete-if-not #'(lambda (x) (eq (car x) :value))
-			       (mapcar #'(lambda (x) (cons (assignment-type x)
-							   (assignment-value x)))
-				       (iter assignment-list nil))))))))

Modified: trunk/asn.1/mib.lisp
==============================================================================
--- trunk/asn.1/mib.lisp	(original)
+++ trunk/asn.1/mib.lisp	Wed Sep 19 08:35:54 2007
@@ -55,19 +55,40 @@
   '("RFC1155-SMI"
     "SNMPv2-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 &key (verbose nil))
   (let ((zb:*comment-start* "--")
         (zb:*comment-brackets* '(("/*" . "*/")))
         (zb:*preserve-case* t))
-    (zb:file-parser file :grammar (zb:find-grammar "ASN.1") :verbose verbose)))
+    (zb:file-parser file :grammar (find-grammar "ASN.1") :verbose verbose)))
+
+(defun parse-oid-def (syntax-tree)
+  (let ((module (car syntax-tree)))
+    (let ((assignment-list (Module-Body-assignment-list
+			    (Module-Definition-body module))))
+      (labels ((iter (kb-seq acc)
+		 (if (null (kb-sequence-rest kb-seq))
+ 		     (nreverse (cons (kb-sequence-first kb-seq) acc))
+                   (iter (kb-sequence-rest kb-seq)
+                         (cons (kb-sequence-first kb-seq) acc)))))
+	(mapcar #'cdr
+		(delete-if-not #'(lambda (x) (eq (car x) :value))
+			       (mapcar #'(lambda (x) (cons (assignment-type x)
+							   (assignment-value x)))
+				       (iter assignment-list nil))))))))
+
+(defun test-parse (name)
+  (parse-oid-def (parse-mib (mib-pathname name))))
+
+(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 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)))))
 

Added: trunk/asn.1/smi.lisp
==============================================================================
--- (empty file)
+++ trunk/asn.1/smi.lisp	Wed Sep 19 08:35:54 2007
@@ -0,0 +1,87 @@
+(in-package :asn.1)
+
+;;;;;;;;;;;;;;;;;;;;;;;
+;;;; Special Types ;;;;
+;;;;;;;;;;;;;;;;;;;;;;;
+
+;;; Integer (:integer)
+
+(defmethod ber-encode ((value integer))
+  (assert (<= 0 value))
+  (labels ((iter (n 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)
+      (nconc (ber-encode-type 0 0 2)
+             (ber-encode-length l)
+             v))))
+
+(defmethod ber-decode-value ((stream stream) (type (eql :integer)) length)
+  (declare (type stream stream)
+           (type fixnum length)
+           (ignore type))
+  (labels ((iter (i acc)
+             (if (= i length) acc
+               (iter (1+ i) (logior (ash acc 8) (read-byte stream))))))
+    (iter 0 0)))
+
+;;; OCTET STRING (:octet-string)
+
+(defmethod ber-encode ((value simple-base-string))
+  (nconc (ber-encode-type 0 0 4)
+         (ber-encode-length (length value))
+         (map 'list #'char-code value)))
+
+(defmethod ber-decode-value ((stream stream) (type (eql :octet-string)) length)
+  (declare (type stream stream)
+           (type fixnum length)
+           (ignore type))
+  (let ((str (make-string length)))
+    (map-into str #'(lambda () (code-char (read-byte stream))))))
+
+;;; SEQUENCE (:sequence)
+
+(defmethod ber-encode ((value sequence))
+  (let ((sub-encode (apply #'nconc
+                           (map 'list #'ber-encode value))))
+    (nconc (ber-encode-type 0 1 16)
+           (ber-encode-length (length sub-encode))
+           sub-encode)))
+
+(defmethod ber-decode-value ((stream stream) (type (eql :sequence)) length)
+  (declare (type stream stream)
+           (type fixnum length)
+           (ignore type))
+  (labels ((iter (length-left acc)
+             (if (zerop length-left)
+                 (nreverse acc)
+               (multiple-value-bind (sub-type sub-type-length)
+                   (ber-decode-type stream)
+                 (multiple-value-bind (sub-length sub-length-length)
+                     (ber-decode-length stream)
+                   (iter (- length-left
+                            sub-type-length
+                            sub-length-length
+                            sub-length)
+                         (cons (ber-decode-value stream sub-type sub-length) acc)))))))
+    (iter length nil)))
+
+;;; NULL (:null)
+(defmethod ber-encode ((value (eql nil)))
+  (declare (ignore value))
+  (nconc (ber-encode-type 0 0 5)
+         (ber-encode-length 0)))
+
+(defmethod ber-decode-value ((stream stream) (type (eql :null)) length)
+  (declare (type stream stream)
+           (type fixnum length)
+           (ignore type))
+  (assert (zerop length))
+  nil)
+
+(eval-when (:load-toplevel :execute)
+  (install-asn.1-type :integer 0 0 2)
+  (install-asn.1-type :octet-string 0 0 4)
+  (install-asn.1-type :null 0 0 5)
+  (install-asn.1-type :sequence 0 1 16))

Modified: trunk/asn.1/stream-test.lisp
==============================================================================
--- trunk/asn.1/stream-test.lisp	(original)
+++ trunk/asn.1/stream-test.lisp	Wed Sep 19 08:35:54 2007
@@ -3,47 +3,3 @@
 (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)
-   (position :type integer :initform 0 :accessor ber-position)))
-
-(defmethod shared-initialize :after ((instance ber-stream) slot-names &rest initargs)
-  (declare (ignore slot-names initargs))
-  (setf (ber-length instance) (length (ber-sequence instance))))
-
-(defmethod stream-read-byte ((instance ber-stream))
-  (if (= (ber-position instance) (ber-length instance))
-      :eof
-    (let ((byte (elt (ber-sequence instance) (ber-position instance))))
-      (incf (ber-position instance))
-      byte)))
-
-(defun ber-test (x)
-  (let ((code (ber-encode x)))
-    (format t "~A -> ~A~%~{~8,'0B ~}~%~{~D ~}~%"
-            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*))
-  (let ((zb:*warn-conflicts* t)
-        (zb:*allow-conflicts* t))
-    (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)))))
-
-(defun test-parse (name)
-  (parse-oid-def (parse-mib (mib-pathname name))))

Added: trunk/asn.1/syntax.lisp
==============================================================================
--- (empty file)
+++ trunk/asn.1/syntax.lisp	Wed Sep 19 08:35:54 2007
@@ -0,0 +1,21 @@
+(in-package :asn.1)
+
+(defvar *asn.1-syntax-source* (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))))
+
+(eval-when (:load-toplevel :execute)
+  (zebu-load-file *asn.1-syntax*))
+
+(defun update-syntax (&optional (zb *asn.1-syntax-source*) (tab *asn.1-syntax*))
+  (let ((*warn-conflicts* t)
+        (*allow-conflicts* t))
+    (zebu-compile-file zb :output-file tab)
+    (zebu-load-file tab)))
+



More information about the Cl-net-snmp-cvs mailing list