-
Data: 2011-02-07 20:23:26
Temat: parsowanie
Od: Zbigniew Malec <a...@i...invalid> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Witam,
mam takie pytanie ze swiata parserów.
Piszę sobie taki mały parser i dla wygody podzieliłem go na dwie części:
Tokenizer i Parser.
W mojej składni występuje znaczek nawiasu klamrowego { i teraz, jeżeli jest
on po dolarze $, to znaczy, że jest to początek nazwy zmiennej, natomiast
jeżeli nie jest po dolarze, to jest po prostu elementem tekstu,
przykładowo:
abra { cos ${zmienna}
Pierwszy nawias to tekst, a kolejne, to już elementy zmiennej.
I teraz tak się zastanawiam (czysto koncepcyjnie), czy w tym przypadku
tokenami powinny być:
LITERAŁ: abra { coś
ZNACZNIK ZMIENNEJ
POCZĄTEK ZMIENNEJ
LITERAŁ: zmienna
KONIEC ZMIENNEJ
czy raczej
LITERAŁ: abra
NAWIAS
LITERAŁ: coś
ZNACZNIK ZMIENNEJ
NAWIAS OTWIERAJĄCY
LITERAŁ: zmienna
NAWIAS ZAMYKAJĄCY
i dopiero w parserze to sklejać dalej.
Rozwiązanie 1 ma taką zaletę, że od razu otrzymujemy sensowne tokeny (i jak
tak patrzę na dokumentację różnych parserów do C++ np. to wygląda, że tak
właśnie jest to robione), jednak trzeba pamiętać jeszcze kontekst, np. że
do tej pory nie było dolara $, więc to jest nawias, a nie początek
zmiennej, a to się może szybko przekształcić w bałagan nie do utrzymania.
Rorwiązanie 2 ma natomiast taką wadę, że na parserze spoczywa obowiązek
łączenia tokenów w większe tokeny (np. LITERAŁ: abra, NAWIAS, LITERAŁ: coś
w LITERAŁ: abra { coś), jednakże łatwiej jest tutaj zarządzać stanem
poprzez odpowiednie zchodzenie w dół drzewa z accept i expect.
Więc jakbyście wy to zrobili?
Ps. Chciałbym zaznaczyć, że wiem, że istnieją setki gotowych bibliotek i
tak dalej, jednak ja się pytam dla wiedzy, a nie dla praktycznego
rozwiązania.
Ps. Na internecie jest sporo na ten temat, jednakże poruszane są tylko
przykłady łatwe, w których takie dylematy nie występują :] Ale jakby gdzieś
ktoś miał linka, to też się nie obrażę.
--
Pozdrawiam
Zbyszek Malec
Następne wpisy z tego wątku
- 07.02.11 20:50 Wojciech Muła
- 07.02.11 22:30 Wojciech \"Spook\" Sura
- 08.02.11 23:47 Zbigniew Malec
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-11-24 Aby WKOOOORWIĆ ekofaszystów ;-)
- 2024-11-22 OC - podwyżka
- 2024-11-22 wyszedł z domu bez buta
- 2024-11-22 Bieda hud.
- 2024-11-24 DS1813-10 się psuje
- 2024-11-23 Białystok => Inżynier bezpieczeństwa aplikacji <=
- 2024-11-23 Szczecin => QA Engineer <=
- 2024-11-23 Warszawa => SEO Specialist (15-20h tygodniowo) <=
- 2024-11-22 Warszawa => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-11-22 Warszawa => Senior Account Manager <=
- 2024-11-22 Warszawa => Key Account Manager <=
- 2024-11-22 Warszawa => DevOps Specialist <=
- 2024-11-22 Kraków => IT Expert (Network Systems area) <=
- 2024-11-22 Warszawa => Infrastructure Automation Engineer <=
- 2024-11-22 Warszawa => Presales / Inżynier Wsparcia Technicznego IT <=