Metody realizacji języków programowania/MRJP Laboratorium/Scrap: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przemek (dyskusja | edycje)
Przemek (dyskusja | edycje)
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===

Wersja z 14:39, 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 "x", where x 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:

; { }
= , :
( ) :=
[ ] .
- + !
* / <
> <= >=
== != ||
&&    



<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> \}

Comments

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> \}