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í
×
včera 12:11 | Zajímavý software

Do pondělí 14. června do 19:00 lze na Humble Bundle získat zdarma počítačovou hru Surviving Mars - Deluxe Edition (YouTube) běžící také na Linuxu.

Ladislav Hagara | Komentářů: 0
11.6. 17:55 | Zajímavý software

RTS (Real-time strategy) hra Loria běžící také na Linuxu je nově k dispozici zdarma (Steam, GOG.com). Vývojový tým se soustředí na RTS hru Liquidation. Její vývoj lze podpořit na Kickstarteru.

Ladislav Hagara | Komentářů: 0
11.6. 09:00 | Nová verze

PeaZip (Wikipedie), tj. multiplatformní správce archivů naprogramovaný ve Free Pascalu v Lazarusu, dospěl do verze 8.0. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 10
11.6. 08:00 | Komunita

Diskusi o očkování proti onemocnění covid-19 se nevyhnul ani odborný diskusní list LKML (Linux Kernel Mailing List). Linus Torvalds očkování doporučuje.

Ladislav Hagara | Komentářů: 144
11.6. 07:00 | Bezpečnostní upozornění

V příspěvku na blogu GitHubu je podrobně rozebrána bezpečností chyba CVE-2021-3560 v toolkitu polkit (Wikipedie) zneužitelná k lokální eskalaci práv. Videoukázka na YouTube. Chyba byla do upstreamu commitnuta před 7 lety a v upstreamu ve verzi 0.119 je již opravena.

Ladislav Hagara | Komentářů: 2
10.6. 20:11 | Nová verze

Byla vydána nová verze 1.57 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.57 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

Ladislav Hagara | Komentářů: 0
10.6. 19:22 | IT novinky

Na konferenci Internet a Technologie 21 s podtitulem mojeID byla představena nová mobilní aplikace MojeID Klíč. Ta má uživatelům služby mojeID ještě více usnadnit přístup ke službám veřejné správy dostupným přes Národní bod pro identifikaci a autentizaci (NIA) a nahrazuje dosavadní aplikaci „mojeID Autentikátor“ používanou od roku 2016. Novinka splňuje veškeré bezpečnostní požadavky a získala akreditaci od Ministerstva vnitra na

… více »
Ladislav Hagara | Komentářů: 0
10.6. 08:00 | Komunita

Do 17. června probíhá GrafanaCONline 2021, tj. online konference uživatelů a vývojářů open source nástroje Grafana (Wikipedie) pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění. V rámci keynote byla představena nová Grafana 8.0.

Ladislav Hagara | Komentářů: 1
9.6. 14:11 | Zajímavý článek

MojeFedora.cz se v článku Flatseal: mějte aplikace pod kontrolou věnuje nástroji Flatseal. Jedná se o grafického správce oprávnění aplikací ve Flatpaku. Instalovat jej lze z Flathubu.

Ladislav Hagara | Komentářů: 7
9.6. 13:44 | Nová verze

Byla vydána nová stabilní verze 4.0 (4.0.2312.24) webového prohlížeče Vivaldi (Wikipedie). Přehled novinek v příspěvku na blogu: automatický překlad stránek pomocí Lingvanex hostovaný na Vivaldi a zatím v beta verzi integrovaný Vivaldi Mail, Calendar a Feed Reader. Nejnovější Vivaldi je postaven na Chromiu 91.0.4472.79.

Ladislav Hagara | Komentářů: 14
Používáte kalkulačku?
 (9%)
 (30%)
 (61%)
 (27%)
 (13%)
Celkem 176 hlasů
 Komentářů: 22, poslední 11.6. 14:37
Rozcestník

Quick-and-dirty parsování

28.7.2007 07:39 | Přečteno: 1338× | 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.