Author : Ekkehard Morgenstern Version : 1.0 Date : May 27, 2009 Data Structure Definition Language ---------------------------------- - binary language to tackle the problem of how to store data structure definitions for high-level languages. Syntax: FIELD( S, n ) - define signed integer of n bytes FIELD( U, n ) - define unsigned integer of n bytes FIELD( F, n ) - define floating-point of n bytes FIELD( SB, n ) - define signed integral bit-field of n bits FIELD( UB, n ) - define unsigned integral bit-field of n bits FIELD( P, k ) - define pointer to type k PAD( n ) - define n pad bytes PADB( n ) - define n pad bits REF key - reference definition in-line BEGIN key - begin definition with key "key" END - end current definition NAME name - define name of definition BNF: fld-s-token := '\001' . fld-u-token := '\002' . fld-f-token := '\003' . fld-sb-token := '\004' . fld-ub-token := '\005' . fld-p-token := '\006' . pad-token := '\007' . padb-token := '\010' . name-token := '\011' . begin-token := '\012' . end-token := '\013' . ref-token := '\014' . key-id-1-byte := '\015' . key-id-2-byte := '\016' . key-id-3-byte := '\017' . key-id-4-byte := '\018' . byte-bit-count := '\001' .. '\377' . byte := '\000' .. '\377' . name-char-1 := 'A' .. 'Z' | 'a' .. 'z' | '_' | ':' | '@' | '$' . name-char-2 := name-char-1 | '0' .. '9' . name-text := name-char-1 { name-char-2 } . key-id-1 := key-id-1-byte byte . key-id-2 := key-id-2-byte byte byte . key-id-3 := key-id-3-byte byte byte byte . key-id-4 := key-id-4-byte byte byte byte byte . key-identifier := key-id-1 | key-id-2 | key-id-3 | key-id-4 . fld-s := fld-s-token byte-bit-count . fld-u := fld-u-token byte-bit-count . fld-f := fld-f-token byte-bit-count . fld-sb := fld-sb-token byte-bit-count . fld-ub := fld-ub-token byte-bit-count . fld-p := fld-p-token key-identifier . pad := pad-token byte-bit-count . padb := padb-token byte-bit-count . ref := ref-token key-identifier . fld := fld-s | fld-u | fld-f | fld-sb | fld-ub | fld-p | pad | pad-b | ref . name := name-token name-text . begin := begin-token key-identifier . end := end-token . def := begin [ name ] { fld } end . def-list := def { def } .