-
Data: 2011-02-07 22:30:31
Temat: Re: parsowanie
Od: "Wojciech \"Spook\" Sura" <spook"mad@hatter"op.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Dnia 07-02-2011 o 21:23:26 Zbigniew Malec <a...@i...invalid>
napisał(a):
(...)
W moim parserze wyrażeń matematycznych zastosowałem wariant ze wstępną
(uproszczoną) analizą składniową. Fragment pliku wejściowego dla
generatora tokenizera wygląda tak:
# Stan 1 - Oczekiwanie na obiekt numeryczny
1,integer->2=[0-9]+
1,unaryoperator->1=(\-)|(\!)
1,variable->2=[a-zA-Z][a-zA-Z0-9]*
1,function->1=[a-zA-Z][a-zA-Z0-9]*\(
1,openparenthesis->1=\(
(...)
# Stan 2 - Oczekiwanie na operator
2,closeparenthesis->2=\)
2,operator->1=(\+)|(\-)|(\*)|(\/)|(\\)|(\%)|(\^)|(\<
\<)|(\>\>)|(\<)|(\>)|(\<\=)|(\>\=)|(\=\=)|(\!\=)|(\&
)|(\|)|(\#)
(...)
Czyli na przykład f(x*(3+4)) zostanie rozpoznane jako:
function, variable, operator, openparenthesis, integer, operator, integer,
closeparenthesis, closeparenthesis.
Analogicznie -2-3 jako:
unaryoperator integer operator integer
Moim zdaniem taka wstępna analiza składniowa jest bardzo wygodna, bo
pozwala na wczesne wykrycie podstawowych błędów składniowych. Jeśli na
przykład ktoś postawi operator binarny zaraz za nawiasem otwierającym -
gdzie oczekiwany jest obiekt numeryczny - pierwszy zaprotestuje tokenizer,
zgłaszając nie rozpoznany obiekt.
Jest też minus tego rozwiązania: błąd zgłoszony użytkownikowi nie jest
zbyt czytelny ("Nie rozpoznany token" lub "Nieprawidłowe wyrażenie" kontra
"Nieoczekiwane wystąpienie operatora binarnego"). Wszystko jednak zależy
od potrzeb :)
Pozdrawiam -- Spook.
--
Używam klienta poczty Opera Mail: http://www.opera.com/mail/
Następne wpisy z tego wątku
- 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-27 Re: UseGalileo -- PRODUKTY I APLIKACJE UŻYWAJĄ JUŻ DZIŚ SYSTEMU GALILEO
- 2024-11-27 Re: UseGalileo -- PRODUKTY I APLIKACJE UŻYWAJĄ JUŻ DZIŚ SYSTEMU GALILEO
- 2024-11-28 droga laweta
- 2024-11-28 Co tam się odpierdala w tej Warszawie?
- 2024-11-28 skąd się biorą tacy debile?
- 2024-11-28 JDG i utylizacja sprzetu
- 2024-11-27 Identyfikacja układ SO8 w sterowniku migających światełek choinkowych
- 2024-11-28 Katowice => Technical Artist <=
- 2024-11-28 Katowice => Technical Artist <=
- 2024-11-28 Bydgoszcz => QA Engineer <=
- 2024-11-28 Zielona Góra => Spedytor międzynarodowy <=
- 2024-11-28 Kraków => DevOps Engineer (Junior or Regular level) <=
- 2024-11-27 Warszawa => Analityk Biznesowo-Systemowy <=
- 2024-11-27 Zielona Góra => Senior PHP Developer <=
- 2024-11-27 Warszawa => Senior Java Developer <=