abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 02:11 | Komunita

    Všem čtenářkám a čtenářům AbcLinuxu krásné Vánoce.

    Ladislav Hagara | Komentářů: 14
    dnes 02:00 | Nová verze

    Byla vydána nová verze 7.0 linuxové distribuce Parrot OS (Wikipedie). S kódovým názvem Echo. Jedná se o linuxovou distribuci založenou na Debianu a zaměřenou na penetrační testování, digitální forenzní analýzu, reverzní inženýrství, hacking, anonymitu nebo kryptografii. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 1
    včera 18:33 | Nová verze

    Vývojáři postmarketOS vydali verzi 25.12 tohoto před osmi lety představeného operačního systému pro chytré telefony vycházejícího z optimalizovaného a nakonfigurovaného Alpine Linuxu s vlastními balíčky. Přehled novinek v příspěvku na blogu. Na výběr jsou 4 uživatelská rozhraní: GNOME Shell on Mobile, KDE Plasma Mobile, Phosh a Sxmo.

    Ladislav Hagara | Komentářů: 0
    včera 13:55 | Nová verze

    Byla vydána nová verze 0.41.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 6.1 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Nová verze

    Byla vydána nová verze 5.5 (novinky) skriptovacího jazyka Lua (Wikipedie). Po pěti a půl letech od vydání verze 5.4.

    Ladislav Hagara | Komentářů: 0
    22.12. 23:44 | Nová verze

    Byla vydána nová verze 5.4.0 programu na úpravu digitálních fotografií darktable (Wikipedie). Z novinek lze vypíchnout vylepšenou podporu Waylandu. Nejnovější darktable by měl na Waylandu fungovat stejně dobře jako na X11.

    Ladislav Hagara | Komentářů: 0
    21.12. 05:00 | Nová verze

    Byla vydána beta verze Linux Mintu 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.

    Ladislav Hagara | Komentářů: 2
    21.12. 01:55 | Nová verze

    GNU Project Debugger aneb GDB byl vydán ve verzi 17.1. Podrobný přehled novinek v souboru NEWS.

    Ladislav Hagara | Komentářů: 0
    19.12. 17:22 | IT novinky

    Josef Průša oznámil zveřejnění kompletních CAD souborů rámů tiskáren Prusa CORE One a CORE One L. Nejsou vydány pod obecnou veřejnou licenci GNU ani Creative Commons ale pod novou licencí OCL neboli Open Community License. Ta nepovoluje prodávat kompletní tiskárny či remixy založené na těchto zdrojích.

    Ladislav Hagara | Komentářů: 14
    19.12. 17:00 | Komunita

    Nový CEO Mozilla Corporation Anthony Enzor-DeMeo tento týden prohlásil, že by se Firefox měl vyvinout v moderní AI prohlížeč. Po bouřlivých diskusích na redditu ujistil, že v nastavení Firefoxu bude existovat volba pro zakázání všech AI funkcí.

    Ladislav Hagara | Komentářů: 1
    Kdo vám letos nadělí dárek?
     (33%)
     (2%)
     (10%)
     (2%)
     (1%)
     (2%)
     (16%)
     (19%)
     (14%)
    Celkem 83 hlasů
     Komentářů: 18, poslední dnes 15:30
    Rozcestník

    Quick-and-dirty parsování

    28.7.2007 07:39 | Přečteno: 1424× | Lisp | Výběrový blog

    Podobně jako TeX, i Common Lisp má mechanismus pro modifikování parseru (ve smyslu lexikální analýzy) svých programů. Doteď jsem to k ničemu nepotřeboval, ale dnes se to hodilo - překvapilo mne, jak jednoduché bylo pomocí modifikace parseru vytvořit parser pro konfigurační soubor v na první pohled odlišném formátu

    Soubor, který jsem chtěl parsovat, měl podobný formát jako třeba /etc/lvm/lvm.conf nebo /etc/logrotate.conf: komentářové řádky uvozené #, informace seskupené pomocí { }, řetězce v uvozovkách.

    Abych byl schopen soubor načíst pomocí funkce read, potřeboval jsem tedy zejména nadefinovat chování { a #:

    ;;; Nemodifikujeme přímo to, co používá lisp, ale separátní kopii
    (defparameter *conf-readtable* (copy-readtable)
      "Definice parsování pro konfigurační soubory")
    
    ; # se bude chovat stejně jako ;
    (set-macro-character #\# (get-macro-character #\;)
       nil *conf-readtable*) 
    
    ; { } bude načítat list
    (set-macro-character #\{
      (lambda (stream char)
         (read-delimited-list #\} stream t))
      t *conf-readtable*)
    
    Toť vše. Nyní už lze použít běžné prostředky pro načtení souboru - pro jednoduchost třeba s makry balíku series:
    (let ((*readtable* *conf-readtable*)) ; bude se používat nová tabulka
      (collect (scan-file #P "/etc/lvm/lvm.conf")))
    =>
    (DEVICES
     (DIR = "/dev" SCAN = [ "/dev" ] FILTER = [ "r|/dev/cdrom|" ] CACHE =
      "/etc/lvm/.cache" WRITE_CACHE_STATE = 1 SYSFS_SCAN = 1 MD_COMPONENT_DETECTION
      = 1)
     LOG
     (VERBOSE = 0 SYSLOG = 1 OVERWRITE = 0 LEVEL = 0 INDENT = 1 COMMAND_NAMES = 0
      PREFIX = "  ")
     BACKUP
     (BACKUP = 1 BACKUP_DIR = "/etc/lvm/backup" ARCHIVE = 1 ARCHIVE_DIR =
      "/etc/lvm/archive" RETAIN_MIN = 10 RETAIN_DAYS = 30)
     SHELL (HISTORY_SIZE = 100) GLOBAL
     (UMASK = 77 TEST = 0 ACTIVATION = 1 PROC = "/proc" LOCKING_TYPE = 1
      LOCKING_DIR = "/var/lock/lvm")
     ACTIVATION
     (MISSING_STRIPE_FILLER = "/dev/ioerror" RESERVED_STACK = 256 RESERVED_MEMORY =
      8192 PROCESS_PRIORITY = -18 MIRROR_REGION_SIZE = 512 MIRROR_LOG_FAULT_POLICY
      = "allocate" MIRROR_DEVICE_FAULT_POLICY = "remove"))
    
    Pro hledání konkrétní informace lze pak použít běžné nástroje pro práci se seznamy, což zrovna v Lispu jde docela dobře:
    (third ; tag = value ...
      (member 'proc (getf * 'global)))
    =>
    "/proc"
    
    Samozřejmě, není to dokonalé - pro to co jsem potřeboval jsem ještě musel předefinovat 0, aby byla rozpoznána konvence 0777 (viz umask nakoře) resp 0xffff, a u toho lvm by mohlo být vhodné předefinovat i [, ale je to vcelku přímočaré a zřejmě občas užitečné. A o řád přesnější než grep.        

    Hodnocení: 91 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Josef Kufner avatar 29.7.2007 20:24 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Quick-and-dirty parsování
    Tohle by mohlo být zajímavé udělat třeba v céčku, ale nevím, jestli načítat konfiguráky pomocí gcc a dlopen by bylo dostatečně zvrhlé.
    Hello world ! Segmentation fault (core dumped)
    30.7.2007 03:04 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Quick-and-dirty parsování
    Nebylo, o dost lepší je použít libtcc. ;-) (Asi jsem snob, ale i na ten lvm.conf bych si radši napsal parser, už kvůli detekci chyb. A pro vlastní aplikace jedině S-expy a READ, proč to komplikovat. :-))
    30.7.2007 08:08 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: Quick-and-dirty parsování
    Jestli psát parser záleží na účelu. Já potřeboval jednorázově a rychle dostat nějakou informaci z několika podobných souborů stejného typu. Kdyby to měla být knihovna kterou bych chtěl reusovat/zveřejnit, měl na to čas - a zejména znal přesně syntaxi souborů :), tak bych o parseru možná začal uvažovat. I když - tohle je taky parser, ne? :)
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.