diff --git a/abnf/hello-abnf/src/hello_abnf/core.clj b/abnf/hello-abnf/src/hello_abnf/core.clj index 477de1c..cde8d21 100644 --- a/abnf/hello-abnf/src/hello_abnf/core.clj +++ b/abnf/hello-abnf/src/hello_abnf/core.clj @@ -58,18 +58,13 @@ signature = 65*65bytes " :input-format :abnf)) -(whisper-envelope-parser "\u0000") - -;; can we print whisper envelope -; hex repr - ;; See envelope.nim and envelope.nim.out ;;env0 = Envelope(expiry:100000, ttl: 30, topic: [byte 0, 0, 0, 0],data: repeat(byte 9, 256), nonce: 1010101) ;; XXX: This isn't going to work because we don't have RLP logic setup, in principle though -;;(whisper-envelope-parser +(whisper-envelope-parser "f90111830186a01e8400000000b9010009090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909830f69b5") - +;; [:whisper-envelope [:expiry [:bytes [:OCTET "f"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "1"]]] [:ttl [:bytes [:OCTET "1"]] [:bytes [:OCTET "1"]] [:bytes [:OCTET "8"]] [:bytes [:OCTET "3"]]] [:topic [:bytes [:OCTET "0"]] [:bytes [:OCTET "1"]] [:bytes [:OCTET "8"]] [:bytes [:OCTET "6"]]] [:data [:bytes [:OCTET "a"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "1"]] [:bytes [:OCTET "e"]] [:bytes [:OCTET "8"]] [:bytes [:OCTET "4"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "b"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "1"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "9"]]] [:nonce [:bytes [:OCTET "8"]] [:bytes [:OCTET "3"]] [:bytes [:OCTET "0"]] [:bytes [:OCTET "f"]] [:bytes [:OCTET "6"]] [:bytes [:OCTET "9"]] [:bytes [:OCTET "b"]] [:bytes [:OCTET "5"]]]] (def waku-parser @@ -121,3 +116,26 @@ bytes = *OCTET" :input-format :abnf) "127") ) + +;; ABNF self-evaluating terminals example +;; http://zguide.zeromq.org/py:chapter7 +(def ex (insta/parser " +nom-protocol = open-peering *use-peering + +open-peering = ':C-OHAI' ( ':S-OHAI-OK' / ':S-WTF' ) + +use-peering = ':C-ICANHAZ' + / ':S-CHEEZBURGER' + / ':C-HUGZ' ':S-HUGZ-OK' + / ':S-HUGZ' ':C-HUGZ-OK' +" :input-format :abnf)) + +(ex ":C-OHAI:S-OHAI-OK:C-ICANHAZ:S-CHEEZBURGER:C-HUGZ:S-HUGZ") +;; Parse error at line 1, column 49: +;; :C-OHAI:S-OHAI-OK:C-ICANHAZ:S-CHEEZBURGER:C-HUGZ:S-HUGZ +;; ^ +;; Expected: +;; ":S-HUGZ-OK" + +(ex ":C-OHAI:S-OHAI-OK:C-ICANHAZ:S-CHEEZBURGER:C-HUGZ:S-HUGZ-OK") +;; [:nom-protocol [:open-peering ":C-OHAI" ":S-OHAI-OK"] [:use-peering ":C-ICANHAZ"] [:use-peering ":S-CHEEZBURGER"] [:use-peering ":C-HUGZ" ":S-HUGZ-OK"]]