Metody realizacji języków programowania/MRJP Laboratorium/Gramatyka Kotka: Różnice pomiędzy wersjami
| Linia 12: | Linia 12: | ||
===Zarezerwowane słowa i symbole=== | ===Zarezerwowane słowa i symbole=== | ||
Zbiór zarezerwowanych słów to zbiór terminali z gramatyki. Te słowa kluczowe składają się ze znaków niebędących literami są zwane symbolami. Są one traktowane w inny sposób niż te, które są podobne do identyfikatorów. Reguły leksykalne są takie same jak w językach Haskell, C, i Java, włączając reguły dla najdłuższego dopasowania i konwencje odnośnie białch znaków. | Zbiór zarezerwowanych słów to zbiór terminali z gramatyki. Te słowa kluczowe składają się ze znaków niebędących literami są zwane symbolami. Są one traktowane w inny sposób niż te, które są podobne do identyfikatorów. Reguły leksykalne są takie same jak w językach ''Haskell'', ''C'', i ''Java'', włączając reguły dla najdłuższego dopasowania i konwencje odnośnie białch znaków. | ||
Słowa kluczowe używane w Kotku to : | Słowa kluczowe używane w Kotku to : | ||
Wersja z 09:05, 17 wrz 2006
Gramatyka języka Kotek
Struktura leksykalna języka Kotek
Identyfikatory
Identyfikatory to ciągi znaków zaczynające się literą, a zawierające dowolną kombinację liter, cyfr, i znaków podkreślenia _, poza słowami kluczowymi.
Literały
Literały napisowe <String> mają postać "x", gdzie x jest dowolnym ciągiem znaków z wyjątkiem ", chyba że jest on poprzedzony przez \.
Literały liczbowe <Int> to niepuste ciągi cyfr.
Zarezerwowane słowa i symbole
Zbiór zarezerwowanych słów to zbiór terminali z gramatyki. Te słowa kluczowe składają się ze znaków niebędących literami są zwane symbolami. Są one traktowane w inny sposób niż te, które są podobne do identyfikatorów. Reguły leksykalne są takie same jak w językach Haskell, C, i Java, włączając reguły dla najdłuższego dopasowania i konwencje odnośnie białch znaków.
Słowa kluczowe używane w Kotku to :
| array | class | delete |
| do | done | else |
| endif | extends | function |
| if | int | new |
| null | of | program |
| read | return | string |
| super | then | this |
| type | var | void |
| while | write |
Symbole używane w Kotku to:
| ; | { | } |
| = | , | : |
| ( | ) | := |
| [ | ] | . |
| - | + | ! |
| * | / | < |
| > | <= | >= |
| == | != | || |
| && |
Komentarze
Komentarze jednolinijkowe zaczynają się // i trwają do końca linii. Komentarze wielolinijkowe są otoczone (* i *). Komentarze wielolinijkowe mogą być zagnieżdżone.
Struktura syntaktyczna języka Kotek
Nieterminale są otoczone < i >. Symbole ::= (produkcja), | (suma) i ε (pusta reguła) należą do notacji BNF (uwaga, symbol || jest z języka Kotek). Wszystkie inne sybmole są terminalami.
| <Program> | ::= | program ; <Ciało> |
| <Ciało> | ::= | <ListaDeklaracji> <Blok> |
| <Blok> | ::= | { <ListaInstrukcji> } |
| <ListaDeklaracji> | ::= | ε |
| | | <Deklaracja> <ListaDeklaracji> | |
| <Deklaracja> | ::= | <DeklaracjaTypu> |
| | | <DeklaracjaZmiennej> | |
| | | <DeklaracjaFunkcji> | |
| | | <DeklaracjaKlasy> | |
| <DeklaracjaTypu> | ::= | type <Ident> = <OpisTypu> |
| <OpisTypu> | ::= | <Ident> |
| | | { <ListaDeklaracjiZmiennej> } | |
| | | array of <Typ> | |
| <ListaDeklaracjiZmiennej> | ::= | <DeklaracjaZmiennej> |
| | | <DeklaracjaZmiennej> , <ListaDeklaracjiZmiennej> | |
| <Typ> | ::= | <Ident> |
| | | string | |
| | | int | |
| | | void | |
| <DeklaracjaZmiennej> | ::= | var <Ident> : <Typ> |
| <DeklaracjaFunkcji> | ::= | function <Ident> ( <DeklaracjaArgumentow> ) : <Typ> <Cialo> |
| <DeklaracjaArgumentów> | ::= | <ListaDeklaracjiZmiennej> |
| | | ε | |
| <ListaInstrukcji> | ::= | ε |
| | | <Instrukcja> <ListaInstrukcji> | |
| <Instrukcja> | ::= | <Wyrażenie> ; |
| | | <ZłożonaInstrukcja> ; | |
| | | <WyrażeniePostfiksowe> := <Wyrażenie> ; | |
| | | <Blok> | |
| | | delete <Wyrażenie> ; | |
| | | ; | |
| | | read <Ident> ; | |
| | | write <Wyrażenie> ; | |
| | | return <Wyrażenie> ; | |
| | | return ; | |
| <WyrazeniePodstawowe> | ::= | <Ident> |
| | | <String> | |
| | | <Int> | |
| | | ( <Wyrażenie> ) | |
| | | this | |
| | | super | |
| | | null | |
| <WyrazeniePostfiksowe> | ::= | <WyrażeniePostfiksowe> [ <Wyrażenie> ] |
| | | <WyrażeniePostfiksowe> ( <Parametry> ) | |
| | | <WyrażeniePostfiksowe> . <Ident> | |
| | | <WyrażeniePodstawowe> | |
| <Parametry> | ::= | ε |
| | | <ListWyrażenie> | |
| <ListaWyrażeń> | ::= | <Wyrażenie> |
| | | <Wyrażenie> , <ListaWyrażeń> | |
| <WyrażenieUnarne> | ::= | <OperatorUnarny> <WyrażenieUnarne> |
| | | <WyrażeniePostfiksowe> | |
| <OperatorUnarny> | ::= | - |
| | | + | |
| | | ! | |
| <WyrażenieMultiplikatywne> | ::= | <WyrażenieMultiplikatywne> <OperatorMultiplikatywny> <WyrażenieUnarne> |
| | | <WyrażenieUnarne> | |
| <WyrażenieAddytywne> | ::= | <WyrażenieAddytywne> <OperatorAddytywny> <WyrażenieMultiplikatywne> |
| | | <WyrażenieMultiplikatywne> | |
| <OperatorMultiplikatywny> | ::= | * |
| | | / | |
| <OperatorAddytywny> | ::= | + |
| | | - | |
| <WyrażeniePorównania> | ::= | <WyrażenieAddytywne> <OperatorPorównania> <WyrażenieAddytywne> |
| | | <WyrażenieAddytywne> | |
| <OperatorPorównania> | ::= | < |
| | | > | |
| | | <= | |
| | | >= | |
| | | == | |
| | | != | |
| <WyrażenieLogiczne> | ::= | <WyrażeniePorównania> <OperatorLogiczny> <WyrażeniePorównania> |
| | | <WyrażeniePorównania> | |
| <OperatorLogiczny> | ::= | || |
| | | && | |
| <Wyrażenie> | ::= | <WyrażenieLogiczne> |
| | | new <Typ> | |
| | | new <Typ> [ <Wyrazenie> ] | |
| <ZłożonaInstrukcja> | ::= | if <Wyrażenie> then <ListaInstrukcji> else <ListaInstrukcji> endif |
| | | if <Wyrażenie> then <ListaInstrukcji> endif | |
| | | while <Wyrażenie> do <ListaInstrukcji> done | |
| <DeklaracjaKlasy> | ::= | class <Ident> extends <Ident> { <ListaDeklaracji> } |