Pascal’s Backus Naur Form (BNF)

 
 

BNF is used in compiler design process. This diagram summarizes the program writing method in Pascal.


 

 

<prog>            ::= PROGRAM <prog-name> <element> BEGIN <statement list> END.

<prog-name>    ::=  <ident>

<ident>                        ::= <letter> | <letter><digit>

<element>                    ::=  VAR <dec-list> : <type> |

      CONST <dec-list> = <type>

<dec-list>                     ::=  <declaration> | <ident-list> : <type>

<declaration>                ::=  <ident-list> : <type>

<type>                         ::=  INTEGER | STRING | REAL

<ident-list>       ::=  ident | <ident-list>

<statement list>            ::=  <statement> | <statement  list> ; <statement>

<statement>       ::=  <assign> | <input st> | <output st> | <defined loop> | <indefined loop>

<assign>                      ::=  <ident> := <expression>

<expression>                ::=  <term> | <expression> + <term> | <expression> - <term>

<condition statement> ::= IF <comparison> THEN <body> |

       IF <comparison> THEN <body> ELSE <body>

<term>             ::=  <factor> | <term> * <factor> | <term> DIV <factor>

<factor>            ::=  <ident> | int | ( <expression> )

<input st>         ::=  READ ( <ident-list> )

<output st>       ::=  WRITE ( <ident-list> )

<defined loop>  ::=  FOR <ident> := <expression> TO <expression> DO <body>

<indefined loop> ::= WHILE <comparison> DO <body> |

REPEAT <body> UNTIL <comparison>

<comparison> ::= <expression> <relation> <expression>

<relation>         ::=     = | < | <= | >= | <>

<body>             ::=  <statement> | BEGIN <statement-list> END

<letter>            ::=  a | b | ... | z | A | B |  ... | Z

<digit> ::=  0 | 1 | 2 | 3 | ... | 9

<procedure>     ::=  PROCEDURE <proc-name>(<dec-list>) VAR <dec-list> BEGIN

      <statement list> END

<proc-name>  ::=  <ident>

<function>        ::=  FUNCTION <func-name>(<dec-list>):<type> VAR <dec-list> BEGIN

      <statement list> END

<func-name>  ::=  <ident>

 
Copyright by Chasan Chouse