Docstoc

Syntax

Document Sample
Syntax Powered By Docstoc
					                                                          Syntaxe jazyka SIMULA


Definice syntaktických jednotek jsou rozděleny do sedmi kapitol. V rámci kapitol jsou hierarchicky uspořádány. Jednotlivé syntaktické jednotky
jsou pojmenovány výrazy uzavřenými do závorek <>. Definice je uvedena vždy vpravo od symbolu ::= . Klíčová slova jsou odlišena tučným
písmem. Složené závorky {} označují možné řetězení syntaktických jednotek umístěných v této závorce. Hranaté závorky [] označují
syntaktickou jednotku, která může být umístěna na daném místě. Znak | čteme jako nebo, kulaté závorky () mají obvyklý význam. Jednotlivé
znaky nebo skupiny znaků, které jsou součástí zdrojového textu programu jsou uzavřeny do uvozovek, např „(“ „)“ „;“ „.“ „,“ apod. Mezery
nemají význam.

1.Programový modul

<SIMULA-zdrojový-modul> ::= [<externí hlavička>](<program>|<deklarace procedury>|<deklarace třídy>) [„;“]
  <externí hlavička> ::= <externí deklarace> „;“ {<externí deklarace> „;“}
    <externí deklarace> ::= <deklarace extrení procedury>|<deklarace externí třídy>
        <deklarace externí procedury>::=external [<druh>] [<typ>]procedure <seznam externalů>
                                                  | external <druh> procedure <seznam externalů> <specifikace procedury>
              <druh>::=<identifikátor>
              <specifikace procedury>::=is <deklarace procedury>
        <deklarace externí třídy>::=external class <seznam externalů>
           <seznam externalů>::=<external> {„,“<external>}
              <external>::=<identifikátor>[= <identifikace externalu>]
                 <identifikace externalu>::=<řetěz>
  <program>:: = <příkaz>

2.Deklarace
<deklarace>::=<deklarace jednoduché proměnné>|<deklarace pole>|<deklarace přepínače>|<deklarace procedury>
                                                                                                |<deklarace třídy>|<deklarace externalu>
   <deklarace jednoduché proměnné>::=<typ><seznam typů>
     <seznam typů>::=<prvek seznamu typů>{„,“<prvek seznamu typů>}
        <prvek seznamu typů>::=<identifikátor>|<konstanta>
            <konstanta>::=<identifikátor> = <hodnotový výraz> | <identifikátor> <textový výraz>



                                                                                                                                             1
<deklarace pole>::=[<typ>]array <segment pole>{„,“<segment pole>}
  <segment pole>::=<identifikátor pole>{„,“<identifikátor pole>} „(”<seznam dvojic mezí>”)”
     <identifikátor pole>::=<identifikátor>
     <seznam dvojic mezí>::=<dvojice mezí>{„,“<dvojice mezí>}
        <dvojice mezí>::=<aritmetický výraz>:<aritmetický výraz>
<deklarace přepínače>::=switch <identifikátor přepínače>:=<seznam přepínače>
  <seznam přepínače>::=<cílový výraz> {„,“<cílový výraz>}
<deklarace procedury>::=[<typ>] procedure <hlavička procedury> „;“ <tělo procedury>
  <hlavička procedury>::=<identifikátor procedury> [<formální parametry> „;“ [<mód>] <specifikace>]
     <identifikátor procedury>::=<identifikátor>
     <formální parametry>::= „(”<formální parametr> {„,“<formální parametr>}“)”
        <formální prarametr>::=<identifikátor>
     <mód>::=<jména>[<hodnoty>]|<hodnoty>[<jména>]
        <jména>::=name <seznam identifikátorů>„;“
        <hodnoty>::=value <seznam identifikátorů>„;“
            <seznam identifikátorů>::=<identifikátor>{„,“<identifikátor>}
     <specifikace>::=<specifikátor> <seznam identifikátorů>„;“{<specifikátor> <seznam identifikátorů>„;“}
        <specifikátor>::=<typ>[array | procedure] | label | switch
  <tělo procedury>::=<příkaz>
<deklarace třídy>::=[<prefix>] <hlavní část>
  <prefix>::=<identifikátor třídy>
  <hlavní část>::=class <identifikátor třídy>[<formální parametry> „;“ [<hodnoty>] <specifikace>] „;“ [<chránění>„;“]
                                                                                                        [<virtualita>„;“] <tělo třídy>
     <identifikátor třídy>::=<identifikátor>
     <chránění>::=<specifikace ochrany> {„;“<specifikace ochrany>}
        <specifikace ochrany>::=hidden <seznam identifikátorů> | protected <seznam identifikátorů>
                                                | hidden protected <seznam identifikátorů> | protected hidden <seznam identifikátorů>
     <virtualita>::=virtual: <specifikace virtuality>„;“ {<specifikace virtuality>„;“}
        <specifikace virtuality>::=<specifikátor> <seznam identifikátorů> | procedure <identifikátor procedury> <specifikace procedury>
     <tělo třídy>::=<příkaz>|<dělené tělo>
        <dělené tělo>::=<počáteční operace>< vnitřní část ><koncové operace>
            <počáteční operace>::=(begin | <hlavička bloku>„;“){<příkaz>„;“}



                                                                                                                                          2
              <vnitřní část>::={<label>:}inner
              <koncové operace>::=end „;“<složený konec>

3.Příkazy
<příkaz>::={<label>:}<nepodmíněný příkaz>|{<label>:}<podmíněný příkaz>|{<label>:}<příkaz cyklu>
   <nepodmíněný příkaz>::=<přiřazovací příkaz>|<příkaz while>|<příkaz skoku>|<příkaz procedury>|<generátor objektu>
                                                          |<příkaz inspekce>|<složený příkaz>|<blok>|<prázdný příkaz>|<aktivační příkaz>
      <přiřazovací příkaz>::=<přiřazení hodnoty>|<přiřazení odkazu>
         <přiřazení hodnoty>::=<levá strana přiřazení hodnoty> „:=“ <pravá strana přiřazení hodnoty>
            <levá strana přiřazení hodnoty>::=<cíl>|<jednoduchý textový výraz>
               <cíl>::=<proměnná>|<identifikátor procedury>
            <pravá strana přiřazení hodnoty>::=<hodnotový výraz>|<textový výraz>|<přiřazení hodnoty>
         <přiřazení odkazu>::=<levá strana přiřazení odkazu> „:-“ <pravá strana přiřazení odkazu>
            <levá strana přiřazení odkazu>::=<cíl>
            <pravá strana přiřazení odkazu>::=<odkazovací výraz>|<přiřazení odkazu>
      <příkaz while>::=while <booleovský výraz> do <příkaz>
      <příkaz skoku>::=(goto | go to) <cílový výraz>
      <příkaz procedury>::=<identifikátor procedury> [<aktuální parametry>]
      <příkaz inspekce>::=inspect <objektový výraz> <klausule when> {<klausule when>}[<klausule othervwise>]
                                                                      | inspect <objektový výraz> do <příkaz> [<klausule othervwise>]
         <klausule when>::=when <identifikátor třídy> do <příkaz>
         <klausule otherwise>::=otherwise <příkaz>
      <složený příkaz>::=begin <konec složeného příkazu>
         <konec složeného příkazu>::=<příkaz>{„;“<příkaz>}end
      <blok>::=<podblok>|<prefixovaný blok>
         <podblok>::=<hlavička bloku> „;“ <konec složeného příkazu>
            <hlavička bloku>::=begin <deklarace>{„,“<deklarace>}
         <prefixovaný blok>::=<prefix bloku> <hlavní blok>
            <prefix bloku>::=<identifikátor třídy> [<skutečné parametry>]
            <hlavní blok>::=<blok>|<složený příkaz>
      <prázdný příkaz>::=prázdný
   <podmíněný příkaz>::=<klausule if >{<návěští>„:“}<nepodmíněný příkaz>[else <příkaz>]|<klausule if>{<návěští>„:“}<příkaz cyklu>



                                                                                                                                           3
    <klausule if>::= if <booleovský výraz> then
  <příkaz cyklu>::=<klausule for><příkaz>
    <klausule for>::=for <jednoduchá proměnná> <pravá strana for> do
        <jednoduchá proměnná>::=<identifikátor>
        <pravá strana for>::= „:=“ <hodnotový prvek seznamu for>{„,“<hodnotový prvek seznamu for>}
                                                                 | <referenční prvek seznamu for> {„,“<referenční prvek seznamu for> }
           <hodnotový prvek seznamu for>::=<hodnotový výraz>[while <booleovský výraz>]|<textový výraz>
                                                                 |<aritmetický výraz> step <aritmetický výraz> until <aritmetický výraz>
           <referenční prvek seznamu for>::=<referenční výraz> [while <booleovský výraz>]

4.Výrazy

<výraz>::=<hodnotový výraz>|<referenční výraz>|<cílový výraz>
  <hodnotový výraz>::=<aritmetický výraz>|<booleovský výraz>|<znakový výraz>
     <aritmetický výraz>::=<jednoduchý aritmetický výraz>|<klausule if> <jednoduchý aritmetický výraz> else <aritmetický výraz>
        <jednoduchý aritmetický výraz>::=[ „+“| „-“] <term> {„.“(„+“| „-“) <term>}
           <term>::=<faktor>{(„*“ | „/“ | „//“ ) <faktor>}
              <faktor>::=<primár>{„**“ <primár>}
                 <primár>::=<číslo bez znaménka>|<proměnná>|<volání funkce>| „(“<aritmetický výraz>„)“
     <booleovský výraz>::=<jednoduchý booleovský výraz>|<klausule if> <jednoduchý booleovský výraz> else <booleovský výraz>
        <jednoduchý booleovský výraz>::=<booleovská trojice> {or else <booleovská trojice>}
           <booleovská trojice>::=<ekvivalence> {and then <ekvivalence>}
              <ekvivalence>::=<implikace> {eqv <implikace>}
                 <implikace>::=<booleovský term> {imp <booleovský term>}
                    <booleovský term>::=<booleovský factor> {or <booleovský factor>}
                      <booleovský factor>::=<booleovský sekundární výraz> {and <booleovský sekundární výraz>}
                         <booleovský sekundární výraz>::=[not]<booleovský primární výraz>
                            <booleovský primární výraz>::=<logická hodnota>|<proměnná>|<volání funkce>|<relace>
                                                                                                              | „(”<booleovský výraz>”)”
                                  <relace>::=<aritmetická relace>|<znaková relace>|<relace textových hodnot>
                                                           |<objektová relace>|<objektová referenční relace>|<relace textových referencí>
                                     <aritmetická relace>::=<jednoduchý aritmetický výraz><hodnotový relační operátor>



                                                                                                                                            4
                                                                                                      <jednoduchý aritmetický výraz>
                                       <hodnotový relační operator>::= „<“|„<=“| „=“|„>=“|„>“|„<>“
                                    <znaková relace>::= <jednoduchý znakový výraz><hodnotový relační operátor>
                                                                                                          <jednoduchý znakový výraz>
                                    <relace textových hodnot>::=<jednoduchý textový výraz><hodnotový relační operátor>
                                                                                                           <jednoduchý textový výraz>
                                    <objektová relace>::=<jednoduchý objektový výraz> is <identifikátor třídy>
                                                                                  |<jednoduchý objektový výraz> in <identifikátor třídy>
                                    <objektová referenční relace>::=<jednoduchý objektový výraz><porovnání referencí>
                                                                                                          <jednoduchý objektový výraz>
                                       <porovnání referencí>::= „= =“|„=/=“

                                     <textová referenční relace>::=<jednoduchý textový výraz><porovnání referencí>
                                                                                                              <jednoduchý textový výraz>
   <znakový výraz>::=<jednoduchý znakový výraz>|<klausule if> <jednoduchý znakový výraz> else <znakový výraz>
      <jednoduchý znakový výraz>::=<znaková konstanta>|<proměnná>|<volání funkce>| „(“<znakový výraz>„)“
<referenční výraz>::=<objektový výraz>|<textový výraz>
   <objektový výraz>::=<jednoduchý objektový výraz>|<klausule if> <jednoduchý objektový výraz> else <objektový výraz>
      <jednoduchý objektový výraz>::=none | <proměnná>|<volání funkce>|<generátor objektu>|<lokální objekt>
                                                                                      |<kvalifikovaný objekt>| „(“<objektový výraz>„)“
         <proměnná>::=<jednoduchá proměnná>|<indexovaná proměnná>
            <jednoduchá proměnná>::=<identifikátor>
            <indexovaná proměnná>::=<identifikátor pole> „(“<seznam indexů>„)“
               <identifikátor pole>::=<identifikátor>
                  <seznam indexů>::=<indexový výraz>{„,“<indexový výraz>}
                     <indexový výraz>::=<aritmetický výraz>
         <volání funkce>::=<identifikátor procedury> [<skutečné parametry>]
            <identifikátor procedury>::=<identifikátor>
               <identifikátor>::=<vlastní identifikátor>|<odlehlý identifikátor>
                  <odlehlý identifikátor>::=<jednoduchý objektový výraz> „.“ <identifikátor atributu>
                                                                                        |<identifikátor textu> „.“ <identifikátor atributu>
                     <identifikátor atributu>::=<identifikátor>



                                                                                                                                              5
              <skutečné parametry>::= „(”<skutečný parametr> {„,“<skutečný parametr>}”)”
                 <skutečný parametr>::=<výraz>|<identifikátor pole>|<identifikátor přepínače>|<identifikátor procedury>
           <generátor objektu>::=new <identifikátor funkce> [<skutečné parametry>]
           <lokální object>::=this <identifikátor třídy>
           <kvalifikovaný object>::=<jednoduchý objektový výraz> qua <identifikátor třídy>
     <textový výraz>::=<jednoduchý textový výraz>|<klausule if>< jednoduchý textový výraz> else <textový výraz>
        <jednoduchý textový výraz>::=<textový primár> {& <textový primár>}
           <textový primár>::=notext | <řetěz>|<proměnná>|<volání funkce>| „(“<textový výraz>„)“
  <cílový výraz>::=<jednoduchý cílový výraz>|<klausule if> <jednoduchý cílový výraz> else <cílový výraz>
     <jednoduchý cílový výraz>::=<návěští>|<přepínač>| „(”<cílový výraz>”)”
        <návěští>::=<identifikátor>
        <přepínač>::=<identifikátor přepínače> „(”<indexový výraz> „)”
           <identifikátor přepínače>::=<identifikátor>

5.Typy a hodnoty
<typ>::=<hodnotový typ>|<referenční typ>
   <hodnotový typ>::=<aritmetický typ>| boolean | character
      <aritmetický typ>::=<celočíselný typ>|<reálný typ>
         <celočíselný typ>::=[short]integer
         <reálný typ>::=[long]real
   <referenční typ>::=<objektový referenční typ>|text
      <objektový referenční typ>::=ref „(“<kvalifikace>„)“
         <kvalifikace>::=<identifikátor třídy>

6.Symboly
<identifikátor>::=<písmeno>{<písmeno>|<číslice>|„_“}
   <písmeno>::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
   <číslice>::=0|1|2|3|4|5|6|7|8|9
<mezera>::=SP
<číslo bez znaménka>::=<dekadické číslo> [<exponent>]|<exponent>
   <dekadické číslo>::=<celé číslo bez znaménka>[<desetinná část>]|<desetinná část>
      <celé číslo bez znaménka>::=<číslice>{<číslice>| „_“}|<kořen> „R“ <kořenová číslice> {<kořenová číslice>|<kořenová číslice>}



                                                                                                                                     6
        <kořen>::=2|4|8|16
        <kořenová číslice>::=<číslice>|A|B|C|D|E|F

      <desetinná část>::= „.“ <celé číslo bez znaménka>
   <exponent>::=(„&“ | „&&“) [„+“| „-“]<celé číslo bez znaménka>
<řetěz>::=<jednoduchý řetěz> {<oddělovač řetězu> <jednoduchý řetěz>}
   <jednoduchý řetěz>::= “{<isokód>|<znak vyjma uvozovek>| „=“}“
      <isokód>::=|<číslice>|<číslice>|<číslice>|
      <znak vyjma uvozovek>::=libovolný tisknutelný znak s výjimkou znaku “
   <oddělovač řetězu>::=<oddělovač> {<oddělovač>}
      <oddělovač>::=<přímá poznámka>|<mezera>|<formátový symbol>|<oddělení navazujících řádek>
<znaková konstanta>::=`<zápis znaku>`
   <zápis znaku>::=<isokód>|<znak vyjma uvozovek>|“
<formátový symbol>::=BS|HT|LF|VT|FF|CR

7.Třída Simulation
<aktivační příkaz>::=<aktivační klauzule>[<plánovací klauzule>]
   <aktivační klauzule>::=<activátor> <objektový_výraz>
      <activator>::=activate | reactivate
   <plánovací klauzule>::=<časovací klauzule>|(before | after) <objektový výraz>
      <časovací klauzule>::=<jednoduchá časovací klauzule>[prior]
         <jednoduchá časovací klauzule>::=(at|delay)<aritmetický výraz>




                                                                                                 7

				
DOCUMENT INFO
Shared By:
Categories:
Tags: syntax
Stats:
views:0
posted:3/29/2013
language:Czech
pages:7