Metody realizacji języków programowania/MRJP Laboratorium/Gramatyka Kotka
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łych 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 symbole 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> } |