Informacje, które udało nam się zgromadzić na temat Analiza leksykalna , zostały starannie sprawdzone i uporządkowane, aby były jak najbardziej przydatne. Prawdopodobnie trafiłeś tutaj, aby dowiedzieć się więcej na temat Analiza leksykalna . W Internecie łatwo zgubić się w gąszczu stron, które mówią o Analiza leksykalna , a jednocześnie nie podają tego, co chcemy wiedzieć o Analiza leksykalna . Mamy nadzieję, że dasz nam znać w komentarzach, czy podoba Ci się to, co przeczytałeś o Analiza leksykalna poniżej. Jeśli informacje o Analiza leksykalna , które podajemy, nie są tym, czego szukałeś, daj nam znać, abyśmy mogli codziennie ulepszać tę stronę.
.
W informatyce , analiza leksykalna , Lexing , segmentacji lub tokeny jest konwersja na cig znaków (tekst) na licie symboli ( tokeny w jzyku angielskim). Jest to cz pierwszej fazy acucha kompilacji . Symbole te s nastpnie zuywane podczas parsowania . Program wykonujcy analiz leksykaln nazywa si analizatorem leksykalnym , tokenizerem lub leksykiem. Analizator leksykalny jest zwykle czony z analizatorem skadni w celu analizy skadni tekstu.
Leksem to cig znaków w programu ródowego, który pasuje do wzorca o sownikowego symbolem, który analizowano za pomoc analizatora sownikowego jako przykad tego symbolu sownikowego.
Niektórzy autorzy uywaj terminu token do reprezentowania zarówno cigu znaków przetwarzanego przez analizator leksykalny, jak i struktury danych wytworzonej na wyjciu tego przetwarzania.
Termin leksem w informatyce nie ma takiego samego znaczenia jak leksem w jzykoznawstwie . W informatyce jego definicja jest podobna do definicji morfemu w jzykoznawstwie.
Jednostka leksykalna lub leksykalny leksykalny lub prociej leksykalny element to para skadajca si z nazwy i opcjonalnej wartoci. Nazwa jednostki leksykalnej jest kategori jednostki leksykalnej.
Kilka przykadów nazw jednostek leksykalnych najczciej spotykanych:
Nazwisko | Wartoci |
---|---|
identyfikatory |
x, color, UP
|
sowa kluczowe |
if, while, return
|
interpunkcja |
}, (, ;
|
operatorzy |
+, <, =
|
literay |
true, 6.02e23, "music"
|
Nazw jednostki leksykalnej mona porówna do pojcia natury gramatycznej .
Te jzyki programowania czsto okrela zasady, jak gramatyka definiuje skadni do przyjcia. Reguy te czsto przybieraj posta wyrae regularnych i definiuj sekwencje znaków uywane do tworzenia leksemów.
Jzyki rozpoznawane przez wyraenie regularne nazywane s jzykami racjonalnymi . Moemy skojarzy automat skoczony z dowolnym wyraeniem regularnym . S te jzyki nieracjonalne.
Dwie z najwaniejszych kategorii jednostek leksykalnych to znaki spacji i komentarze. Oba s zdefiniowane w gramatyce wikszoci jzyków i objte leksykami, ale najczciej s uwaane za nieistotne; w najlepszym przypadku oddzielenie dwóch tokenów i nie generowanie ich samodzielnie. Od tego s dwa gówne wyjtki. Przede wszystkim tak zwane jzyki skadni podobne do wci, takie jak Python, które ograniczaj bloki kodu za pomoc wci i dla których znaki spacji s znaczce i dlatego mog generowa tokeny. Nastpnie w niektórych zastosowaniach lekserów, w tym niektórych narzdzi do debugowania lub eleganckich impresji (adne drukarki w jzyku angielskim), moe by konieczne zachowanie oryginalnego kodu ródowego w celu póniejszego wywietlenia uytkownikowi.
Nazywany analizatorem leksykalnym ( lexer English) dowolny program wykonujcy analiz leksykaln.
Analizator leksykalny suy do:
Gdy analizator leksykalny wykryje nieprawidowy leksem, zgasza bd. W przeciwiestwie do tego, kombinacje leksemów s zwykle pozostawione parserowi: na przykad typowy analizator leksykalny rozpoznaje nawiasy jako leksemy, ale nie sprawdza, czy otwarty nawias ( jest koniecznie powizany z nawiasem zamykajcym ) .
Analizator leksykalny mona napisa
Chocia leksery s gównie uywane do pisania kompilatorów, s one wykorzystywane przy projektowaniu innych narzdzi do przetwarzania jzyków komputerowych, takich jak lint czy eleganckie systemy drukowania ( troff ).
Analiza leksykalna to pierwsza faza wspóczesnych procesów kompilacji . Analiz zwykle wykonuje si, przegldajc tekst ródowy tylko raz.
Polega na rozgraniczeniu i jeli to moliwe scharakteryzowaniu odcinków wejciowego cigu znaków w cigu leksemów, które zostan przekazane do innej formy analizy.
Na przykad instrukcja sum = 2 + 3;
w jzyku C tworzy po analizie leksykalnej nastpujc list symboli:
Warto | Kategoria leksykalna |
---|---|
suma | Nazwa Uytkownika |
= | operator przypisania |
2 | dosowna liczba cakowita |
+ | operator dodawania |
3 | dosowna liczba cakowita |
; | koniec deklaracji |
Sekwencja znaków wejciowych, niejawnie podzielona spacjami, jak w jzykach naturalnych, zostaa przeksztacona w list szeciu jednostek leksykalnych:
[(identifiant, sum), (opérateur d'affectation, =), (entier littéral, 2), (operator, +), (entier littéral, 3), (fin de déclaration, ;)]
Ogólnie rzecz biorc, gdy jednostka leksykalna reprezentuje kilka leksemów, analizator leksykalny zapisuje wystarczajc ilo informacji, aby móc odtworzy oryginalny leksem i uy go podczas analizy semantycznej. Parser pobiera te informacje i przechowuje je w formie drzewa skadni abstrakcyjnej (AST). Jest to konieczne, aby unikn utraty informacji w przypadku numerów i identyfikatorów.
Leksemy s identyfikowane wedug regu ustalonych przez analizator leksykalny. Wród metod uywanych do identyfikacji leksemów znajdziemy: wyraenia regularne , okrelony cig znaków zwany flag , znaki zwane separatorami oraz sownik.
Analizator leksykalny na ogó nie przetwarza kombinacji jednostek leksykalnych, zadanie to jest pozostawione parserowi. Na przykad typowy analizator leksykalny moe rozpoznawa i przetwarza nawiasy, ale nie jest w stanie ich policzy i dlatego zweryfikowa, czy kady nawias zamykajcy ")" pasuje do poprzedzajcego nawiasu otwartego "(").
Analiza leksykalna cigu znaków odbywa si w trzech etapach:
Pierwszy krok, skanowanie, jest zwykle wykonywany przez maszyn stanow . Automat ten posiada informacje niezbdne do przetworzenia wszystkich cigów znaków, które mog zawiera si w leksemie (kady znak tych cigów jest leksemem). Na przykad int moe zawiera wszystkie moliwe sekwencje cyfr . W wielu przypadkach pierwszy znaczcy znak odczytany moe by uyty do wywnioskowania natury biecego leksemu, a kady kolejny znak bdzie dodawany do wartoci tokena, a do odczytania niedopuszczalnego znaku. W niektórych jzykach regua moe by jednak bardziej zoona i wymaga cofania si na ju przeczytanych znakach. Na przykad w C znak L nie wystarcza do odrónienia identyfikatora zaczynajcego si od L od literau skadajcego si z tego pojedynczego znaku.
Leksem to tylko cig znaków charakteryzujcy si typem. Aby zbudowa jednostk leksykaln, analizator leksykalny wymaga drugiego kroku, oceny, która wytwarza warto. Rodzaj leksemu w poczeniu z jego wartoci stanowi token, który nastpnie moe zosta dostarczony do parsera. Niektóre leksemy, takie jak te reprezentujce interpunkcj, nie maj rzeczywistej wartoci, wic ich funkcja oceny moe zwróci warto równ zero; potrzebny jest tylko ich typ. Podobnie, ocena moe cakowicie usun leksem, ukrywajc go przed parserem, tak jak w przypadku znaków spacji lub komentarzy. Ocena identyfikatorów jest czsto prosta, przekazujc bezporednio cig znaków stanowicy je w wartoci, ale dla wartoci liczbowych analizator leksykalny moe zdecydowa si na przeksztacenie ich w jednostk leksykaln w postaci cigów znaków (odroczenie ich przetwarzania analizy semantycznej) lub sam je oceni.
Nawet jeli jest moliwe, a nawet konieczne w przypadku niewielkiej liczby leksemów napisanie analizatora leksykalnego odrcznie, to czsto s one generowane przez narzdzia automatyczne. Narzdzia te ogólnie akceptuj wyraenia regularne opisujce autoryzowane leksemy. Kade wyraenie regularne jest powizane z regu produkcji dla gramatyki formalnej ocenianego jzyka. Narzdzia te mog generowa kod ródowy, który mona skompilowa i wykona, lub zbudowa tabel przej stanów dla automatu stanów.
Wyraenie regularne reprezentuje zwart wersj wzorca, który musz by zgodne z leksemami, aby utworzy prawidow jednostk leksykaln. Na przykad w przypadku jzyka opartego na jzyku francuskim identyfikatorem moe by dowolny znak alfabetyczny lub podkrelenie, po którym nastpuje dowolna sekwencja cyfr alfanumerycznych lub znaków ASCII i/lub podkrele. Ta sekwencja moe by reprezentowana przez nastpujcy cig znaków [a-zA-Z_][a-zA-Z_0-9]*
.
Wyraenia regularne i generowane przez nie automaty skoczone nie s wystarczajco potne, aby obsuy wzorce rekurencyjne, takie jak te, które mona znale w jzykach Dyck . Te zabiegi s pozostawione analizatorowi skadni.
W starszych jzykach, takich jak ALGOL , pierwszy etap kompilacji nazywano rekonstrukcj linii, która polegaa na skanowaniu tekstu w poszukiwaniu sów kluczowych oraz usuwaniu spacji i komentarzy . Analizy leksykalne i skadniowe zostay wykonane przez pojedynczy program parser-lekser.
Zazwyczaj analiza leksykalna dziaa na poziomie sów . Czasami jednak moe by trudno odróni, czym jest sowo. Czsto analizatory leksykalne opieraj si na prostych heurystykach , na przykad:
W jzykach uywajcych spacji midzywyrazowych (jak wikszo jzyków programowania i jzyków naturalnych uywajcych alfabetu aciskiego) takie podejcie jest atwe do wdroenia. Mimo to istnieje wiele przypadków ( skurcze , emotikony , zoony, URI , itd. ), Które wymagaj bardziej skomplikowanej heurystyczne by przetwarzany przez analizator sownikowego. Klasycznym przykadem jest sekwencja znaków pochodzca z Nowego Jorku, która w jzyku angielskim tworzy jedno sowo, ale któr naiwnie mona rozdzieli na dwa lub nawet trzy leksemy.
Analiza leksykalna moe by szczególnie trudna w przypadku jzyków naturalnych pisanych w scriptio continua, dla których nie ma symbolu interpunkcji lub separacji leksemów, jak w staroytnej grece czy chiskim .
Niektóre jzyki, takie jak Python, uywaj wci do oddzielania bloków kodu . Analizator leksykalny musi zatem generowa jednostk leksykaln INDENT, gdy wcicie wzrasta, a jednostk leksykaln DEDENT, gdy jest zmniejszane. Te jednostki leksykalne odpowiadaj tym generowanym podczas odczytywania nawiasów kwadratowych otwierajcych { i zamykajcych } w jzykach takich jak C. Aby parser móg by uwzgldniony, musi by w stanie zachowa aktualny stan. wcicia (poniewa bloki mog by zagniedane jeden w drugim), co sprawia, e gramatyka analizowanego jzyka jest kontekstowa . INDENT-DEDENT zaley od kontekstu (w tym przypadku na poprzednim poziomie wcicia).
Analizatory leksykalne s czsto generowane przez narzdzia zwane generatorami analizatorów leksykalnych . Jednym z najczciej uywanych jest Lex wraz z generatorem parserów Yacc i ich darmowymi odpowiednikami Flex i Bison . Generatory te s form dedykowanego jzyka , przyjmujcego jako dane wejciowe specyfikacj leksykaln (zwykle wyraenia regularne i niektóre znaczniki) i generujcej leksykay.
Narzdzia te umoliwiaj szybki rozwój funkcjonalnego analizatora leksykalnego.
Duym problemem jest wydajno lekserów, zwaszcza w stabilnych jzykach, w których lekser jest bardzo czsto nazywany (jak C lub HTML). Leksery generowane za pomoc Lex/Flex s uwaane za do szybkie, ale w niektórych przypadkach mog by od dwóch do trzech razy wolniejsze ni leksery pisane odrcznie lub narzdzia takie jak re2c.
W przypadku jzyków programowania algorytm ten czsto dziaa w czasie liniowym w odniesieniu do wielkoci sowa wejciowego. Zdarzaj si jednak patologiczne przypadki, w których algorytm dziaa w czasie kwadratowym, taki jak ten: z dwoma leksemami: a i a ab, wpis a n wymaga, aby algorytm doszed do koca wyrazu dla kadego a, które rozpozna . Zoono jest wtedy kwadratowa.
Istniej inne algorytmy zdolne do analizy sowa w czasie liniowym.
Mamy nadzieję, że informacje, które zgromadziliśmy na temat Analiza leksykalna , były dla Ciebie przydatne. Jeśli tak, nie zapomnij polecić nas swoim przyjaciołom i rodzinie oraz pamiętaj, że zawsze możesz się z nami skontaktować, jeśli będziesz nas potrzebować. Jeśli mimo naszych starań uznasz, że informacje podane na temat _title nie są całkowicie poprawne lub że powinniśmy coś dodać lub poprawić, będziemy wdzięczni za poinformowanie nas o tym. Dostarczanie najlepszych i najbardziej wyczerpujących informacji na temat Analiza leksykalna i każdego innego tematu jest istotą tej strony internetowej; kierujemy się tym samym duchem, który inspirował twórców Encyclopedia Project, i z tego powodu mamy nadzieję, że to, co znalazłeś o Analiza leksykalna na tej stronie pomogło Ci poszerzyć swoją wiedzę.