rfcc 39 : sérialisation de posts
Version : 20040502
Lexer : Syntaxe du format de sérialisation
Grammaire :
[A] item -> array
[B] item -> tokentype string properties
[C] array -> # itemnb item{itemnb}
[D] itemnb -> int
[E] int -> digit* :
[F] tokentype -> ident
[G] ident -> * string
[H] ident -> int
[I] string -> charnb char{itemnb}
[J] charnb -> int
[K] properties -> propnb prop{propnb}
[L] prop -> ident string
[M] propnb -> int
Lexer : Sémantique du format de sérialisation
NB : Les éléments terminaux de la grammaire ne sont pas repris.
[A][B] Le texte correspondant aux données sérialisées contient un item. Un item peut être un token ou un tableau contenant d'autres items (niveau n'imbrications illimité).
[C][D] Un tableau contient des items, précédés de leur nombre.
[E] Un entier est représenté par une suite de chiffres, l'entier est nul si la suite est vide.
[B][F] Un token contient son type sous la forme d'un identificateur, son texte brut et la liste de ses propriétés.
[G][H] Un identificateur apparait soit sous la forme de son numéro s'il est déjà apparu avant, soit sous la forme d'un astérisque suivi de son texte brut si c'est sa première occurence (il prend alors comme numéro le nombre d'identificateurs apparus avant lui).
[I][J] Un texte brut est composé de sa longueur, suivi de ses caractères.
[K][M] Un liste de propriétés contient des propriétés, précédées de leur nombre.
[L] Une propriété est composée de son nom sous forme d'identificateur et de sa valeur sous forme de texte brut.
Slip : tokens
- end
- relevantText : ''
- relevantProperties : /
- (jeton non textuel)
- text
- relevantText : $text
- relevantProperties : /
- (jeton textuel)
- blank
- relevantText : ' '
- relevantProperties : /
- (jeton textuel)
- url - cas 1 (!defined($properties{'url'}))
- relevantText : $text
- relevantProperties : /
- (jeton non textuel)
- url - cas 2 (defined($properties{'url'}))
- relevantText : $properties{'title'}
- relevantProperties :
- (jeton non textuel)
- wiki
- relevantText : ''
- relevantProperties :
- keyword
- site OU name (optionnel)
- (jeton non textuel)
- smiley
- relevantText : ''
- relevantProperties :
- (jeton non textuel)
- begintag - cas 1 ($properties{'confirmed'})
- relevantText : ''
- relevantProperties :
- (jeton non textuel)
- begintag - cas 2 (!$properties{'confirmed'})
- relevantText : '<'.$properties{'name'}.'>'
- relevantProperties :
- (jeton textuel)
- endtag - cas 1 ($properties{'confirmed'})
- relevantText : ''
- relevantProperties :
- (jeton non textuel)
- endtag - cas 2 (!$properties{'confirmed'})
- relevantText : '</'.$properties{'name'}.'>'
- relevantProperties :
- (jeton textuel)
- clock - cas 1 ($properties{'valid'})
- relevantText : $text
- relevantProperties :
- valid
- hours
- minutes
- seconds (optionnel)
- index (optionnel)
- board (optionnel)
- sub (optionnel)
- (jeton non textuel)
- clock - cas 2 (!$properties{'confirmed'})
- relevantText : $text
- relevantProperties :
- (jeton textuel)
Slip : Table des identificateurs initiale
- 00
- text
- 01
- blank
- 02
- url
- 03
- wiki
- 04
- smiley
- 05
- begintag
- 06
- endtag
- 07
- clock
- 08
- title
- 09
- keyword
- 10
- site
- 11
- name
- 12
- confirmed
- 13
- valid
- 14
- hours
- 15
- minutes
- 16
- seconds
- 17
- index
- 18
- board
- 19
- sub