|
|
Linia 128: |
Linia 128: |
| </tr> | | </tr> |
| </table> | | </table> |
|
| |
|
| |
|
| |
|
| |
| </tr>
| |
| <tr>
| |
| <td>''<Program>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>program</tt> <tt>;</tt> ''<Cialo>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<Cialo>'' </td>
| |
| <td>::= </td>
| |
| <td>''<ListDeklaracja>'' ''<Blok>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<Blok>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>\{</tt> ''<ListInstrukcja>'' <tt>\</tt>} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<ListDeklaracja>'' </td>
| |
| <td>::= </td>
| |
| <td> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<Deklaracja>'' ''<ListDeklaracja>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<Deklaracja>'' </td>
| |
| <td>::= </td>
| |
| <td>''<DeklaracjaTypu>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<DeklaracjaZmiennej>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<DeklaracjaFunkcji>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<DeklaracjaKlasy>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<DeklaracjaTypu>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>type</tt> ''<Ident>'' <tt>{<math>=</math></tt>} ''<OpisTypu>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<OpisTypu>'' </td>
| |
| <td>::= </td>
| |
| <td>''<Ident>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>\{</tt> ''<ListDeklaracjaZmiennej>'' <tt>\</tt>} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>array</tt> <tt>of</tt> ''<Typ>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<ListDeklaracjaZmiennej>'' </td>
| |
| <td>::= </td>
| |
| <td>''<DeklaracjaZmiennej>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<DeklaracjaZmiennej>'' <tt>,</tt> ''<ListDeklaracjaZmiennej>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<Typ>'' </td>
| |
| <td>::= </td>
| |
| <td>''<Ident>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>string</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>int</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>void</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<DeklaracjaZmiennej>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>var</tt> ''<Ident>'' <tt>:</tt> ''<Typ>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<DeklaracjaFunkcji>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>function</tt> ''<Ident>'' <tt>(</tt> ''<DeklaracjaArgumentow>'' <tt>)</tt> <tt>:</tt> ''<Typ>'' ''<Cialo>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<DeklaracjaArgumentow>'' </td>
| |
| <td>::= </td>
| |
| <td>''<ListDeklaracjaZmiennej>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<ListInstrukcja>'' </td>
| |
| <td>::= </td>
| |
| <td> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<Instrukcja>'' ''<ListInstrukcja>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<Instrukcja>'' </td>
| |
| <td>::= </td>
| |
| <td>''<Wyrazenie>'' <tt>;</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<ZlozonaInstrukcja>'' <tt>;</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<WyrazeniePostfiksowe>'' <tt>:{<math>=</math></tt>} ''<Wyrazenie>'' <tt>;</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<Blok>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>delete</tt> ''<Wyrazenie>'' <tt>;</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>;</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>read</tt> ''<Ident>'' <tt>;</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>write</tt> ''<Wyrazenie>'' <tt>;</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>return</tt> ''<Wyrazenie>'' <tt>;</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>return</tt> <tt>;</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<WyrazeniePodstawowe>'' </td>
| |
| <td>::= </td>
| |
| <td>''<Ident>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<String>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<Integer>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>(</tt> ''<Wyrazenie>'' <tt>)</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>this</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>super</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>null</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<WyrazeniePostfiksowe>'' </td>
| |
| <td>::= </td>
| |
| <td>''<WyrazeniePostfiksowe>'' <tt>[</tt> ''<Wyrazenie>'' <tt>]</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<WyrazeniePostfiksowe>'' <tt>(</tt> ''<Parametry>'' <tt>)</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<WyrazeniePostfiksowe>'' <tt>.</tt> ''<Ident>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<WyrazeniePodstawowe>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<Parametry>'' </td>
| |
| <td>::= </td>
| |
| <td> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<ListWyrazenie>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<ListWyrazenie>'' </td>
| |
| <td>::= </td>
| |
| <td>''<Wyrazenie>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<Wyrazenie>'' <tt>,</tt> ''<ListWyrazenie>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<WyrazenieUnarne>'' </td>
| |
| <td>::= </td>
| |
| <td>''<OperatorUnarny>'' ''<WyrazenieUnarne>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<WyrazeniePostfiksowe>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<OperatorUnarny>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>{<math>-</math></tt>} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>{<math>+</math></tt>} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>!</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<WyrazenieMultiplikatywne>'' </td>
| |
| <td>::= </td>
| |
| <td>''<WyrazenieMultiplikatywne>'' ''<OperatorMultiplikatywny>'' ''<WyrazenieUnarne>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<WyrazenieUnarne>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<WyrazenieAddytywne>'' </td>
| |
| <td>::= </td>
| |
| <td>''<WyrazenieAddytywne>'' ''<OperatorAddytywny>'' ''<WyrazenieMultiplikatywne>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<WyrazenieMultiplikatywne>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<OperatorMultiplikatywny>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>*</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>/</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<OperatorAddytywny>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>{<math>+</math></tt>} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>{<math>-</math></tt>} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<WyrazeniePorownania>'' </td>
| |
| <td>::= </td>
| |
| <td>''<WyrazenieAddytywne>'' ''<OperatorPorownania>'' ''<WyrazenieAddytywne>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<WyrazenieAddytywne>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<OperatorPorownania>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>{<math><</math></tt>} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>{<math>></math></tt>} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>{\terminal{{<math><</math>}{<math>=</math>}}} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>{\terminal{{<math>></math>}{<math>=</math>}}} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>{\terminal{{<math>=</math>}{<math>=</math>}}} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>!{<math>=</math></tt>} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<WyrazenieLogiczne>'' </td>
| |
| <td>::= </td>
| |
| <td>''<WyrazeniePorownania>'' ''<OperatorLogiczny>'' ''<WyrazeniePorownania>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>''<WyrazeniePorownania>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<OperatorLogiczny>'' </td>
| |
| <td>::= </td>
| |
| <td>{\terminal{{<math>|</math>}{<math>|</math>}}} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td>{\terminal{\</td>
| |
| <td>\</td>
| |
| <td>}} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<Wyrazenie>'' </td>
| |
| <td>::= </td>
| |
| <td>''<WyrazenieLogiczne>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>new</tt> ''<Typ>'' </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>new</tt> ''<Typ>'' <tt>[</tt> ''<Wyrazenie>'' <tt>]</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<ZlozonaInstrukcja>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>if</tt> ''<Wyrazenie>'' <tt>then</tt> ''<ListInstrukcja>'' <tt>else</tt> ''<ListInstrukcja>'' <tt>endif</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>if</tt> ''<Wyrazenie>'' <tt>then</tt> ''<ListInstrukcja>'' <tt>endif</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| <td>| </td>
| |
| <td><tt>while</tt> ''<Wyrazenie>'' <tt>do</tt> ''<ListInstrukcja>'' <tt>done</tt> </td>
| |
| </tr>
| |
| <tr>
| |
| <td>''<DeklaracjaKlasy>'' </td>
| |
| <td>::= </td>
| |
| <td><tt>class</tt> ''<Ident>'' <tt>extends</tt> ''<Ident>'' <tt>\{</tt> ''<ListDeklaracja>'' <tt>\</tt>} </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
|
| |
| </td>
| |
| </tr>
| |
|
| |
|
| ===Comments=== | | ===Comments=== |
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:
; |
{ |
} |
= |
, |
: |
( |
) |
:= |
[ |
] |
. |
- |
+ |
! |
* |
/ |
< |
> |
<= |
>= |
== |
!= |
|| |
&& |
|
|
Single-line comments begin with {\symb{//}}. \\Multiple-line comments are enclosed with {\symb{(*}} and {\symb{*)}}.
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> |
::= |
{} |
|
| |
{} |
|
| |
{\terminal{{}{}}} |
|
| |
{\terminal{{}{}}} |
|
| |
{\terminal{{}{}}} |
|
| |
!{} |
<WyrazenieLogiczne> |
::= |
<WyrazeniePorownania> <OperatorLogiczny> <WyrazeniePorownania> |
|
| |
<WyrazeniePorownania> |
<OperatorLogiczny> |
::= |
{\terminal{{}{}}} |
|
| |
{\terminal{\ |
\ |
}} |
<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> \} |
|