; .bp ; .NH ; LEX-KIT-BIB, UNE BIBLIOTHEQUE POUR LEX-KIT. ; .NH 2 ; Quelques utilitaires : (dmd minuscule? (x) `(let ((x ,x)) (and (>= x #/a)(<= x #/z)))) (dmd majuscule? (x) `(let ((x ,x)) (and (>= x #/A)(<= x #/Z)))) (dmd lettre? (x) `(let ((x ,x)) (or (and (>= x #/a)(<= x #/z)) (and (>= x #/A)(<= x #/Z)))))) (dmd chiffre? (x) `(let ((x ,x)) (and (>= x #/0)(<= x #/9))))) (dmd lettre-ou-chiffre? (x) `(let ((x ,x)) (or (and (>= x #/a)(<= x #/z)) (and (>= x #/A)(<= x #/Z)) (and (>= x #/0)(<= x #/9))))) (dmd lettre-ou-chiffre-ou-←? (x) `(let ((x ,x)) (or (and (>= x #/a)(<= x #/z)) (and (>= x #/A)(<= x #/Z)) (and (>= x #/0)(<= x #/9)) (= x #/←)))) (dmd lettre-ou-chiffre-ou-←-ou-prime? (x) `(let ((x ,x)) (or (and (>= x #/a)(<= x #/z)) (and (>= x #/A)(<= x #/Z)) (and (>= x #/0)(<= x #/9)) (= x #/←) (= x #/')))) ; .NH 2 ; Quelques kits classiques. ; .PP ; Rappel: on fabrique ici les fonctions {lexres}:ID etc... (kit-accepte-sequence ID lettre? lettre-ou-chiffre? concat) (kit-accepte-sequence IDS lettre? lettre-ou-chiffre-ou-←? concat) (kit-accepte-sequence IDSP lettre? lettre-ou-chiffre-ou-←-ou-prime? concat) (kit-accepte-sequence NATURAL chiffre? chiffre? implode) (de {lexres}:STRING (in-stream) (when (= (sendq peekcn in-stream) #/") (let ((value (list (sendq readcn in-stream))) (nextcn)) (until (and (=(setq nextcn (sendq readcn in-stream)) #/") (<> (sendq peekcn in-stream) #/")) (newl value nextcn)) (newl value nextcn) (omakeq lexres token 'STRING value (implode (nreverse value)))))) ; .NH 2 ; Kit pour les exposants de Meije. ; .PP ; Ils ont la forme ↑54 ou ↑-2. Peut declencher une erreur ; lexicale si ce qui suit ↑ est mauvais. (de {lexres}:EXPOS (in-stream) (when (= (sendq peekcn in-stream) #/↑) (sendq readcn in-stream) (let ((value (when (= (sendq peekcn in-stream) #/-) (sendq readcn in-stream) '(#/-)))) (ifn (chiffre? (sendq peekcn in-stream)) (exit {Lexical}:error (list "erreur lexicale dans un exposant")) (newl value (sendq readcn in-stream)) (while (chiffre? (sendq peekcn in-stream)) (newl value (sendq readcn in-stream))) (omakeq lexres token 'EXPOS value (implode (reverse value)))))))