powrót do strony głównej >>

Lingwistyka matematyczna, analiza składniowa

Formalizm bezkontekstowych gramatyk generacyjnych Chomsky'ego
Copyright © 2004   Robert Nowotniak

Na tej stronie znajdziesz translator zbioru reguł produkcji dowolnej bezkontekstowej i deterministycznej gramatyki, podanego w postaci metajęzyka BNF, na struktury grafowe, sterujące ogólnym analizatorem syntaktycznym. Możesz zobaczyć wygenerowany graf, sterujący analizatorem ogólnym, a także sprawdzić determinizm podanej gramatyki (problem pustego słowa, lewostronne rekurencje). Ściąga z BNF'u znajduje się na dole tej strony. Jednostkami leksykalnymi są tu pojedyncze znaki.

Kilka przykładów:

Jeśli chcesz sprawdzić działanie dla gotowej gramatyki i zdania, to są one wpisana poniżej. Możesz także wpisać własną gramatykę. Kliknij tutaj, by wyczyścić poniższe pola.

Wpisz zbiór reguł produkcji w BNF:


Napis, którego przynależność do języka sprawdzić:

Generuj schemat grafu.
Sprawdź, czy gramatyka jest deterministyczna.




Zbiór reguł produkcji, oczekiwany przez analizator, musi być prawidłowym
zdaniem, należącym do metajęzyka BNF, określonego następująco:
<Sigma>        ::= <Gramatyka> [ '.' <NowaLinia> ]
<Gramatyka>    ::= <Prod> <Reszta>
<Reszta>       ::= [ <NowaLinia> ( <Gramatyka> | PUSTE ) ]
<Prod>         ::=  <W> "<" <Ident> ">" <W> "::=" <W> <Wyrazenie>
<Wyrazenie>    ::=  <Skladnik> { "|" <W> <Skladnik> }
<Skladnik>     ::=  <Czynnik> { <Czynnik> }
<Czynnik>      ::=  "<" <Ident> ">" <W> | <Lancuch> <W> |
                                        <JedenZnak> <W> |
                        "(" <W> <Wyrazenie> <W> ")" <W> |
                        "[" <W> <Wyrazenie> <W> "]" <W> |
                        "{" <W> <Wyrazenie> <W> "}" <W> |
                                            "PUSTE" <W>
<Ident>        ::=  <Literka> { <Literka> | <Cyfra> }
<Lancuch>      ::= '"' { <NieCudzyslow> } '"'
<JedenZnak>    ::= ''' <DowolnyZnak> '''
<NieCudzyslow> ::= znak o kodzie z przedzialu 1 - 33 lub 35 - 255
<Literka>      ::= "a" | ..... | "z" | "A" | ..... | "Z" 
<NowaLinia>    ::= Znak nowej linii
<Cyfra>        ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' 
<DowolnyZnak>  ::= znak o kodzie z przedzialu 1 - 255
<SPC>          ::= ' '
<W>            ::= { <SPC> }


Jeżeli chcesz się dowiedzieć, jak działa analizator i ta strona, to tutaj możesz pobrać cały kod źródłowy (język Ada95 i PHP):
ling.tgz       Rozmiar: 83.21 KB       Suma kontrolna: ae8f62569d24412fd9e929db878b0af0




Copyright © Robert Nowotniak
3 stycznia 2004