Metody realizacji języków programowania/MRJP Laboratorium/Scrap: Różnice pomiędzy wersjami
(Nie pokazano 27 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 8: | Linia 8: | ||
===Literals=== | ===Literals=== | ||
String literals | String literals ''<String>'' have the form | ||
<tt>"</tt><math>x</math><tt>"</tt>, where <math>x</math> is any sequence of any characters | |||
except | except <tt>"</tt> unless preceded by <tt>\</tt>. | ||
Integer literals | Integer literals ''<Int>'' are nonempty sequences of digits. | ||
===Reserved words and symbols=== | ===Reserved words and symbols=== | ||
The set of reserved words is the set of terminals appearing in the grammar. Those reserved words that consist of non-letter characters are called symbols, and they are treated in a different way from those that are similar to identifiers. The lexer follows rules familiar from languages like Haskell, C, and Java, including longest match and spacing conventions. | The set of reserved words is the set of terminals appearing in the grammar. Those reserved words that consist of non-letter characters are called symbols, and they are treated in a different way from those that are similar to identifiers. The lexer follows rules familiar from languages like Haskell, C, and Java, including longest match and spacing conventions. | ||
The reserved words used in kotek are the following: | The reserved words used in kotek are the following: | ||
<table> | <table> | ||
<tr> | <tr> | ||
<td><tt>array</tt> </td> | <td width="20%"><tt>array</tt> </td> | ||
<td><tt>class</tt> </td> | <td width="20%"><tt>class</tt> </td> | ||
<td><tt>delete</tt> </td> | <td width="20%"><tt>delete</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 68: | Linia 66: | ||
<td><tt>write</tt> </td> | <td><tt>write</tt> </td> | ||
<td> | <td> | ||
</td> | </td> | ||
</tr> | </tr> | ||
</table> | |||
The symbols used in kotek are the following: | |||
<table> | |||
<tr> | <tr> | ||
<td><tt>;</tt> </td> | <td width="20%"><tt>;</tt></td> | ||
<td><tt> | <td width="20%"><tt>{</tt></td> | ||
<td><tt> | <td width="20%"><tt>}</tt></td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td><tt | <td><tt>=</tt></td> | ||
<td><tt>,</tt> </td> | <td><tt>,</tt></td> | ||
<td><tt>:</tt> </td> | <td><tt>:</tt></td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td><tt>(</tt> </td> | <td><tt>(</tt></td> | ||
<td><tt>)</tt> </td> | <td><tt>)</tt></td> | ||
<td><tt>: | <td><tt>:=</tt></td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td><tt>[</tt> </td> | <td><tt>[</tt></td> | ||
<td><tt>]</tt> </td> | <td><tt>]</tt></td> | ||
<td><tt>.</tt> </td> | <td><tt>.</tt></td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td><tt | <td><tt>-</tt></td> | ||
<td><tt | <td><tt>+</tt></td> | ||
<td><tt>!</tt> </td> | <td><tt>!</tt></td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td><tt>*</tt> </td> | <td><tt>*</tt></td> | ||
<td><tt>/</tt> </td> | <td><tt>/</tt></td> | ||
<td><tt> | <td><tt><</tt></td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td><tt> | <td><tt>></tt></td> | ||
<td> | <td><tt><=</tt></td> | ||
<td> | <td><tt>>=</tt></td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td><tt>==</tt></td> | ||
<td><tt>! | <td><tt>!=</tt></td> | ||
<td> | <td><tt>||</tt></td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td><tt>&&</tt></td> | ||
<td> | <td> </td> | ||
<td> | <td> </td> | ||
< | </tr> | ||
</table> | |||
===Comments=== | |||
Single-line comments begin with <tt>//</tt>. | |||
Multiple-line comments are enclosed with <tt>(*</tt> and <tt>*)</tt>. | |||
==The syntactic structure of kotek== | |||
Non-terminals are enclosed between <math>\langle</math> and <math>\rangle</math>. | |||
The symbols := (production), | (union) | |||
and ε (empty rule) belong to the BNF notation. | |||
All other symbols are terminals. | |||
< | <table> | ||
<tr> | <tr> | ||
<td>''Program'' </td> | <td>''<Program>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt>program</tt> <tt>;</tt> ''Cialo'' </td> | <td><tt>'''program'''</tt> <tt>;</tt> ''<Cialo>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''Cialo'' </td> | <td>''<Cialo>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''ListDeklaracja'' ''Blok'' </td> | <td>''<ListDeklaracja>'' ''<Blok>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''Blok'' </td> | <td>''<Blok>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt> | <td><tt>{</tt> ''<ListInstrukcja>'' <tt>}</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''ListDeklaracja'' </td> | <td>''<ListDeklaracja>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td> </td> | <td> ε</td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 147: | Linia 166: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''Deklaracja'' ''ListDeklaracja'' </td> | <td>''<Deklaracja>'' ''<ListDeklaracja>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''Deklaracja'' </td> | <td>''<Deklaracja>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''DeklaracjaTypu'' </td> | <td>''<DeklaracjaTypu>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 159: | Linia 178: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''DeklaracjaZmiennej'' </td> | <td>''<DeklaracjaZmiennej>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 166: | Linia 185: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''DeklaracjaFunkcji'' </td> | <td>''<DeklaracjaFunkcji>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 173: | Linia 192: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''DeklaracjaKlasy'' </td> | <td>''<DeklaracjaKlasy>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''DeklaracjaTypu'' </td> | <td>''<DeklaracjaTypu>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt>type</tt> ''Ident'' <tt> | <td><tt>'''type'''</tt> ''<Ident>'' <tt><math>=</math></tt> ''<OpisTypu>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''OpisTypu'' </td> | <td>''<OpisTypu>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''Ident'' </td> | <td>''<Ident>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 190: | Linia 209: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt> | <td><tt>{</tt> ''<ListDeklaracjaZmiennej>'' <tt>}</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 197: | Linia 216: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>array</tt> <tt>of</tt> ''Typ'' </td> | <td><tt>'''array'''</tt> <tt>'''of'''</tt> ''<Typ>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''ListDeklaracjaZmiennej'' </td> | <td>''<ListDeklaracjaZmiennej>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''DeklaracjaZmiennej'' </td> | <td>''<DeklaracjaZmiennej>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 209: | Linia 228: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''DeklaracjaZmiennej'' <tt>,</tt> ''ListDeklaracjaZmiennej'' </td> | <td>''<DeklaracjaZmiennej>'' <tt>,</tt> ''<ListDeklaracjaZmiennej>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''Typ'' </td> | <td>''<Typ>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''Ident'' </td> | <td>''<Ident>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 221: | Linia 240: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>string</tt> </td> | <td><tt>'''string'''</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 228: | Linia 247: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>int</tt> </td> | <td><tt>'''int'''</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 235: | Linia 254: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>void</tt> </td> | <td><tt>'''void'''</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''DeklaracjaZmiennej'' </td> | <td>''<DeklaracjaZmiennej>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt>var</tt> ''Ident'' <tt>:</tt> ''Typ'' </td> | <td><tt>'''var'''</tt> ''<Ident>'' <tt>:</tt> ''<Typ>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''DeklaracjaFunkcji'' </td> | <td>''<DeklaracjaFunkcji>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt>function</tt> ''Ident'' <tt>(</tt> ''DeklaracjaArgumentow'' <tt>)</tt> <tt>:</tt> ''Typ'' ''Cialo'' </td> | <td><tt>'''function'''</tt> ''<Ident>'' <tt>(</tt> ''<DeklaracjaArgumentow>'' <tt>)</tt> <tt>:</tt> ''<Typ>'' ''<Cialo>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''DeklaracjaArgumentow'' </td> | <td>''<DeklaracjaArgumentow>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''ListDeklaracjaZmiennej'' </td> | <td>''<ListDeklaracjaZmiennej>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td> </td> | ||
</td> | |||
<td>| </td> | <td>| </td> | ||
<td> </td> | <td>ε</td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''ListInstrukcja'' </td> | <td>''<ListInstrukcja>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td> </td> | <td> | ||
ε | |||
</td> | |||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td></td> | ||
<td>| </td> | |||
<td>''<Instrukcja>'' ''<ListInstrukcja>'' </td> | |||
<td>''Instrukcja'' ''ListInstrukcja'' </td> | |||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''Instrukcja'' </td> | <td>''<Instrukcja>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''Wyrazenie'' <tt>;</tt> </td> | <td>''<Wyrazenie>'' <tt>;</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 281: | Linia 299: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''ZlozonaInstrukcja'' <tt>;</tt> </td> | <td>''<ZlozonaInstrukcja>'' <tt>;</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 288: | Linia 306: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''WyrazeniePostfiksowe'' <tt>: | <td>''<WyrazeniePostfiksowe>'' <tt>:<math>=</math></tt> ''<Wyrazenie>'' <tt>;</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 295: | Linia 313: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''Blok'' </td> | <td>''<Blok>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 302: | Linia 320: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>delete</tt> ''Wyrazenie'' <tt>;</tt> </td> | <td><tt>'''delete'''</tt> ''<Wyrazenie>'' <tt>;</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 316: | Linia 334: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>read</tt> ''Ident'' <tt>;</tt> </td> | <td><tt>'''read'''</tt> ''<Ident>'' <tt>;</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 323: | Linia 341: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>write</tt> ''Wyrazenie'' <tt>;</tt> </td> | <td><tt>'''write'''</tt> ''<Wyrazenie>'' <tt>;</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 330: | Linia 348: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>return</tt> ''Wyrazenie'' <tt>;</tt> </td> | <td><tt>'''return'''</tt> ''<Wyrazenie>'' <tt>;</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 337: | Linia 355: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>return</tt> <tt>;</tt> </td> | <td><tt>'''return'''</tt> <tt>;</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''WyrazeniePodstawowe'' </td> | <td>''<WyrazeniePodstawowe>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''Ident'' </td> | <td>''<Ident>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 349: | Linia 367: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''String'' </td> | <td>''<String>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 356: | Linia 374: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''Integer'' </td> | <td>''<Integer>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 363: | Linia 381: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>(</tt> ''Wyrazenie'' <tt>)</tt> </td> | <td><tt>(</tt> ''<Wyrazenie>'' <tt>)</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 370: | Linia 388: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>this</tt> </td> | <td><tt>'''this'''</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 377: | Linia 395: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>super</tt> </td> | <td><tt>'''super'''</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 384: | Linia 402: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>null</tt> </td> | <td><tt>'''null'''</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''WyrazeniePostfiksowe'' </td> | <td>''<WyrazeniePostfiksowe>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''WyrazeniePostfiksowe'' <tt>[</tt> ''Wyrazenie'' <tt>]</tt> </td> | <td>''<WyrazeniePostfiksowe>'' <tt>[</tt> ''<Wyrazenie>'' <tt>]</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 396: | Linia 414: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''WyrazeniePostfiksowe'' <tt>(</tt> ''Parametry'' <tt>)</tt> </td> | <td>''<WyrazeniePostfiksowe>'' <tt>(</tt> ''<Parametry>'' <tt>)</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 403: | Linia 421: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''WyrazeniePostfiksowe'' <tt>.</tt> ''Ident'' </td> | <td>''<WyrazeniePostfiksowe>'' <tt>.</tt> ''<Ident>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 410: | Linia 428: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''WyrazeniePodstawowe'' </td> | <td>''<WyrazeniePodstawowe>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''Parametry'' </td> | <td>''<Parametry>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td> </td> | <td> | ||
ε | |||
</td> | |||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td> </td> | ||
<td>| </td> | |||
<td>''<ListWyrazenie>'' </td> | |||
<td>''ListWyrazenie'' </td> | |||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''ListWyrazenie'' </td> | <td>''<ListWyrazenie>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''Wyrazenie'' </td> | <td>''<Wyrazenie>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 434: | Linia 453: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''Wyrazenie'' <tt>,</tt> ''ListWyrazenie'' </td> | <td>''<Wyrazenie>'' <tt>,</tt> ''<ListWyrazenie>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''WyrazenieUnarne'' </td> | <td>''<WyrazenieUnarne>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''OperatorUnarny'' ''WyrazenieUnarne'' </td> | <td>''<OperatorUnarny>'' ''<WyrazenieUnarne>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 446: | Linia 465: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''WyrazeniePostfiksowe'' </td> | <td>''<WyrazeniePostfiksowe>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''OperatorUnarny'' </td> | <td>''<OperatorUnarny>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt> | <td><tt><math>-</math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 458: | Linia 477: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt> | <td><tt><math>+</math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 468: | Linia 487: | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''WyrazenieMultiplikatywne'' </td> | <td>''<WyrazenieMultiplikatywne>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''WyrazenieMultiplikatywne'' ''OperatorMultiplikatywny'' ''WyrazenieUnarne'' </td> | <td>''<WyrazenieMultiplikatywne>'' ''<OperatorMultiplikatywny>'' ''<WyrazenieUnarne>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 477: | Linia 496: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''WyrazenieUnarne'' </td> | <td>''<WyrazenieUnarne>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''WyrazenieAddytywne'' </td> | <td>''<WyrazenieAddytywne>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''WyrazenieAddytywne'' ''OperatorAddytywny'' ''WyrazenieMultiplikatywne'' </td> | <td>''<WyrazenieAddytywne>'' ''<OperatorAddytywny>'' ''<WyrazenieMultiplikatywne>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 489: | Linia 508: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''WyrazenieMultiplikatywne'' </td> | <td>''<WyrazenieMultiplikatywne>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''OperatorMultiplikatywny'' </td> | <td>''<OperatorMultiplikatywny>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt>*</tt> </td> | <td><tt>*</tt> </td> | ||
Linia 504: | Linia 523: | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''OperatorAddytywny'' </td> | <td>''<OperatorAddytywny>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt> | <td><tt><math>+</math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 513: | Linia 532: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt> | <td><tt><math>-</math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''WyrazeniePorownania'' </td> | <td>''<WyrazeniePorownania>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''WyrazenieAddytywne'' ''OperatorPorownania'' ''WyrazenieAddytywne'' </td> | <td>''<WyrazenieAddytywne>'' ''<OperatorPorownania>'' ''<WyrazenieAddytywne>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 525: | Linia 544: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''WyrazenieAddytywne'' </td> | <td>''<WyrazenieAddytywne>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''OperatorPorownania'' </td> | <td>''<OperatorPorownania>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt> | <td><tt><math><</math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 537: | Linia 556: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt> | <td><tt><math>></math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 544: | Linia 563: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td> | <td><tt><math><=</math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 551: | Linia 570: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td> | <td><tt><math>>=</math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 558: | Linia 577: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td> | <td><tt><math>==</math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 565: | Linia 584: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>! | <td><tt>!<math>=</math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''WyrazenieLogiczne'' </td> | <td>''<WyrazenieLogiczne>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''WyrazeniePorownania'' ''OperatorLogiczny'' ''WyrazeniePorownania'' </td> | <td>''<WyrazeniePorownania>'' ''<OperatorLogiczny>'' ''<WyrazeniePorownania>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 577: | Linia 596: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td>''WyrazeniePorownania'' </td> | <td>''<WyrazeniePorownania>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''OperatorLogiczny'' </td> | <td>''<OperatorLogiczny>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td> | <td><tt><math>||</math></tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 589: | Linia 608: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td> | <td><tt>&&</tt></td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''Wyrazenie'' </td> | <td>''<Wyrazenie>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td>''WyrazenieLogiczne'' </td> | <td>''<WyrazenieLogiczne>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 603: | Linia 620: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>new</tt> ''Typ'' </td> | <td><tt>'''new'''</tt> ''<Typ>'' </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 610: | Linia 627: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>new</tt> ''Typ'' <tt>[</tt> ''Wyrazenie'' <tt>]</tt> </td> | <td><tt>'''new'''</tt> ''<Typ>'' <tt>[</tt> ''<Wyrazenie>'' <tt>]</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''ZlozonaInstrukcja'' </td> | <td>''<ZlozonaInstrukcja>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt>if</tt> ''Wyrazenie'' <tt>then</tt> ''ListInstrukcja'' <tt>else</tt> ''ListInstrukcja'' <tt>endif</tt> </td> | <td><tt>'''if'''</tt> ''<Wyrazenie>'' <tt>'''then'''</tt> ''<ListInstrukcja>'' <tt>'''else'''</tt> ''<ListInstrukcja>'' <tt>'''endif'''</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 622: | Linia 639: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>if</tt> ''Wyrazenie'' <tt>then</tt> ''ListInstrukcja'' <tt>endif</tt> </td> | <td><tt>'''if'''</tt> ''<Wyrazenie>'' <tt>'''then'''</tt> ''<ListInstrukcja>'' <tt>'''endif'''</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
Linia 629: | Linia 646: | ||
</td> | </td> | ||
<td>| </td> | <td>| </td> | ||
<td><tt>while</tt> ''Wyrazenie'' <tt>do</tt> ''ListInstrukcja'' <tt>done</tt> </td> | <td><tt>'''while'''</tt> ''<Wyrazenie>'' <tt>'''do'''</tt> ''<ListInstrukcja>'' <tt>'''done'''</tt> </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td>''DeklaracjaKlasy'' </td> | <td>''<DeklaracjaKlasy>'' </td> | ||
<td>::= </td> | <td>::= </td> | ||
<td><tt>class</tt> ''Ident'' <tt>extends</tt> ''Ident'' <tt> | <td><tt>'''class'''</tt> ''<Ident>'' <tt>'''extends'''</tt> ''<Ident>'' <tt>{</tt> ''<ListDeklaracja>'' <tt>}</tt> </td> | ||
</td> | |||
</tr> | </tr> | ||
<tr> | <tr> |
Aktualna wersja na dzień 15:07, 25 sie 2006
The lexical structure of kotek
Identifiers
Identifiers Ident are unquoted strings beginning with a letter, followed by any combination of letters, digits, and the characters _ ', reserved words excluded.
Literals
String literals <String> have the form "", where is any sequence of any characters except " unless preceded by \.
Integer literals <Int> are nonempty sequences of digits.
Reserved words and symbols
The set of reserved words is the set of terminals appearing in the grammar. Those reserved words that consist of non-letter characters are called symbols, and they are treated in a different way from those that are similar to identifiers. The lexer follows rules familiar from languages like Haskell, C, and Java, including longest match and spacing conventions.
The reserved words used in kotek are the following:
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 |
The symbols used in kotek are the following:
; | { | } |
= | , | : |
( | ) | := |
[ | ] | . |
- | + | ! |
* | / | < |
> | <= | >= |
== | != | || |
&& |
Comments
Single-line comments begin with //. Multiple-line comments are enclosed with (* and *).
The syntactic structure of kotek
Non-terminals are enclosed between and . The symbols := (production), | (union) and ε (empty rule) belong to the BNF notation. All other symbols are terminals.
<Program> | ::= | program ; <Cialo> |
<Cialo> | ::= | <ListDeklaracja> <Blok> |
<Blok> | ::= | { <ListInstrukcja> } |
<ListDeklaracja> | ::= | ε |
| | <Deklaracja> <ListDeklaracja> | |
<Deklaracja> | ::= | <DeklaracjaTypu> |
| | <DeklaracjaZmiennej> | |
| | <DeklaracjaFunkcji> | |
| | <DeklaracjaKlasy> | |
<DeklaracjaTypu> | ::= | type <Ident> <OpisTypu> |
<OpisTypu> | ::= | <Ident> |
| | { <ListDeklaracjaZmiennej> } | |
| | array of <Typ> | |
<ListDeklaracjaZmiennej> | ::= | <DeklaracjaZmiennej> |
| | <DeklaracjaZmiennej> , <ListDeklaracjaZmiennej> | |
<Typ> | ::= | <Ident> |
| | string | |
| | int | |
| | void | |
<DeklaracjaZmiennej> | ::= | var <Ident> : <Typ> |
<DeklaracjaFunkcji> | ::= | function <Ident> ( <DeklaracjaArgumentow> ) : <Typ> <Cialo> |
<DeklaracjaArgumentow> | ::= | <ListDeklaracjaZmiennej> |
| | ε | |
<ListInstrukcja> | ::= |
ε |
| | <Instrukcja> <ListInstrukcja> | |
<Instrukcja> | ::= | <Wyrazenie> ; |
| | <ZlozonaInstrukcja> ; | |
| | <WyrazeniePostfiksowe> : <Wyrazenie> ; | |
| | <Blok> | |
| | delete <Wyrazenie> ; | |
| | ; | |
| | read <Ident> ; | |
| | write <Wyrazenie> ; | |
| | return <Wyrazenie> ; | |
| | return ; | |
<WyrazeniePodstawowe> | ::= | <Ident> |
| | <String> | |
| | <Integer> | |
| | ( <Wyrazenie> ) | |
| | this | |
| | super | |
| | null | |
<WyrazeniePostfiksowe> | ::= | <WyrazeniePostfiksowe> [ <Wyrazenie> ] |
| | <WyrazeniePostfiksowe> ( <Parametry> ) | |
| | <WyrazeniePostfiksowe> . <Ident> | |
| | <WyrazeniePodstawowe> | |
<Parametry> | ::= |
ε |
| | <ListWyrazenie> | |
<ListWyrazenie> | ::= | <Wyrazenie> |
| | <Wyrazenie> , <ListWyrazenie> | |
<WyrazenieUnarne> | ::= | <OperatorUnarny> <WyrazenieUnarne> |
| | <WyrazeniePostfiksowe> | |
<OperatorUnarny> | ::= | |
| | ||
| | ! | |
<WyrazenieMultiplikatywne> | ::= | <WyrazenieMultiplikatywne> <OperatorMultiplikatywny> <WyrazenieUnarne> |
| | <WyrazenieUnarne> | |
<WyrazenieAddytywne> | ::= | <WyrazenieAddytywne> <OperatorAddytywny> <WyrazenieMultiplikatywne> |
| | <WyrazenieMultiplikatywne> | |
<OperatorMultiplikatywny> | ::= | * |
| | / | |
<OperatorAddytywny> | ::= | |
| | ||
<WyrazeniePorownania> | ::= | <WyrazenieAddytywne> <OperatorPorownania> <WyrazenieAddytywne> |
| | <WyrazenieAddytywne> | |
<OperatorPorownania> | ::= | |
| | ||
| | ||
| | ||
| | ||
| | ! | |
<WyrazenieLogiczne> | ::= | <WyrazeniePorownania> <OperatorLogiczny> <WyrazeniePorownania> |
| | <WyrazeniePorownania> | |
<OperatorLogiczny> | ::= | |
| | && | |
<Wyrazenie> | ::= | <WyrazenieLogiczne> |
| | new <Typ> | |
| | new <Typ> [ <Wyrazenie> ] | |
<ZlozonaInstrukcja> | ::= | if <Wyrazenie> then <ListInstrukcja> else <ListInstrukcja> endif |
| | if <Wyrazenie> then <ListInstrukcja> endif | |
| | while <Wyrazenie> do <ListInstrukcja> done | |
<DeklaracjaKlasy> | ::= | class <Ident> extends <Ident> { <ListDeklaracja> } |