[cl-net-snmp-cvs] r37 - in trunk/asn.1: . test

ctian at common-lisp.net ctian at common-lisp.net
Sat Sep 15 21:13:12 UTC 2007


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 , at 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 , at args))))
+;;;; (eval-when (:compile-toplevel :load-toplevel :execute)
+;;;;   (defmacro defdelim (left right parms &body body)
+;;;;     `(ddfn ,left ,right #'(lambda ,parms , at 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 , at 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



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