Синтаксис Компонентного Паскаля (33 правила, 34 ключевых слова)

<модуль>        =  MODULE <идент> ";" [<список импорта>] <описания>
                   [BEGIN <операторы>]
                   [CLOSE <операторы>] END <идент> ".".

<список импорта>=  IMPORT [<идент> ":="] <идент> {"," [<идент> ":="] <идент>} ";".

<описания>      =  { CONST {<оп.константы> ";" } | <тип> {<оп.типа> ";"} |
                     VAR {<оп.переменной> ";"}} {<оп.переменной> ";" | <упрежд.оп.> ";"}.

<оп.константы>  =  <опр.идент> "=" <конст.выражение>.

<оп.типа>       =  <опр.идент> "=" <тип>.

<оп.переменной> =  <список идент ":" <тип>.

<оп.процедуры>  =  PROCEDURE [<принимающий парам.>] <опр.идент> [<форм.парам.>] <атр.метода>
                    [";" <описания> [BEGIN <операторы>] END <идент>].

<атр.метода> 	=  ["," NEW] ["," (ABSTRACT | EMPTY | EXTENSIBLE)].

<упрежд.оп.>	=  PROCEDURE "^" [<принимающий парам.>] <опр.идент> [<форм.парам.>] <атр.метода>.

<форм.парам.>	=  "(" [<раздел форм.парам.> {";" <раздел форм.парам.>}] ")" [":" <тип>].

<раздел форм.парам.> = [VAR | IN | OUT] <идент> {"," <идент>} ":" <тип>.

<принимающий парам.> = "(" [VAR | IN] <идент> ":" <идент> ")".

<тип>    	=   <уточн.идент>
                |  ARRAY [<конст.выражение> {"," <конст.выражение>}] OF <тип>
                | [ABSTRACT | EXTENSIBLE | LIMITED]
                  RECORD ["("<уточн.идент>")"] <список полей> {";" <список полей>} END
                | POINTER TO <тип>
                | PROCEDURE [<форм.парам.>].
<список полей>	=       [<список идент ":" <тип>].

<операторы>	=  <оператор> {";" <оператор>}.

<оператор>      =       [ <составное имя> ":=" <выражение>
                        | <составное имя> ["(" [<список выраж.>] ")"]
                | IF <выражение> THEN <операторы>
                        {ELSIF <выражение> THEN <операторы>}
                        [ELSE <операторы>] END
                | <вариант выбора> <выражение> OF <вариант выбора> {"|" <вариант выбора>}
                        [ELSE <операторы>] END
                | WHILE <выражение> DO <операторы> END
                | REPEAT <операторы> UNTIL <выражение>
                | FOR <идент> ":=" <выражение> TO <выражение> [BY <конст.выражение>]
                        DO <операторы> END
                | LOOP <операторы> END
                | WITH [ <охрана> DO <операторы> ]
                        {"|" [ <охрана> DO <операторы> ] }
                        [ELSE <операторы>] END
                | EXIT
                | RETURN [<выражение>]
                ].
<вариант выбора>	= [<метки выбора> {"," <метки выбора>} ":" <операторы>].

<метки выбора>		= <конст.выражение> [".." <конст.выражение>].

<охрана>		= <уточн.идент> ":" <уточн.идент>.

<конст.выражение>	= <выражение>.

<выражение>		= <простое выраж.> [<отношение> <простое выраж.>].

<простое выраж.>	= ["+" | "-"] <слагаемое> {<аддитивная оп-ция> <слагаемое>}.

<слагаемое>    		=  <сомножитель> {<мультипликативная оп-ция> <сомножитель>}.

<сомножитель>  		=  <составное имя> | number | character | string | NIL | <множество> |
                          "(" <выражение> ")" | " ~ " <сомножитель>.

<множество>     	=  "{" [<элемент> {"," <элемент>}] "}".

<элемент>         	=  <выражение> [".." <выражение>].

<отношение>        	=  "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.

<аддитивная оп-ция>	=  "+" | "-" | OR.

<мультипликативная оп-ция>   = " * " | "/" | DIV | MOD | "&".

<составное имя>     =  <уточн.идент> {"." <идент> | "[" <список выраж.> "]" | " ^ " | "(" <уточн.идент> ")"
                          | "(" [<список выраж.>] ")"} [ "$" ].
<список выраж.>		=  <выражение> {"," <выражение>}.

<список идент.>    	=  <опр.идент> {"," <опр.идент>}.

<уточн.идент.>		=  [<идент> "."] <идент>.

<опр.идент>		=  <идент> [" * " | "-"].