Разработка компиляторов. Ишакова Е.Н. - 6 стр.

UptoLike

Составители: 

6
I C | IC | IR
N R | NR
C 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
R 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Формы Бэкуса-Наура (БНФ)
Метаязык, предложенный Бэкусом и Науром, использует следующие обо-
значения:
-
символ «::=» отделяет левую часть правила от правой (читается:
«определяется как»);
-
нетерминалы обозначаются произвольной символьной строкой, за-
ключенной в угловые скобки «<» и «>»;
-
терминалы - это символы, используемые в описываемом языке;
-
правило может определять порождение нескольких альтернативных
цепочек, отделяемых друг от друга символом вертикальной черты «|» (читается:
«или»).
Пример 2.2. Определение понятия «идентификатор» с использованием
БНФ имеет вид:
<идентификатор> ::= <буква> | <идентификатор> <буква>
| <идентификатор> <цифра>
<буква> :: =
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
<цифра> :: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Расширенные формы Бэкуса-Наура (РБНФ)
Для повышения удобства и компактности описаний, в РБНФ вводятся
следующие дополнительные конструкции (метасимволы):
-
квадратные скобки «[» и «]» означают, что заключенная в них синтак-
сическая конструкция может отсутствовать;
-
фигурные скобки «{» и «}» означают повторение заключенной в них
синтаксической конструкции ноль или более раз;
-
сочетание фигурных скобок и косой черты «{/» и «/}» используется
для обозначения повторения один и более раз;
-
круглые скобки «(» и «)» используются для ограничения альтернатив-
ных конструкций.
Пример 2.3. В соответствии с данными правилами синтаксис модельного
языка
М будет выглядеть следующим образом:
<буква> ::= 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
<цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<идентификатор> ::= <буква> { <буква> | <цифра> }
<число> ::= {/< цифра> /}
<ключевое_слово> ::=
program | var | begin | end | int | bool | read | write | if |
     I → C | IC | IR
     N → R | NR
     C→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
     R→0|1|2|3|4|5|6|7|8|9
                                   Формы Бэкуса-Наура (БНФ)
     Метаязык, предложенный Бэкусом и Науром, использует следующие обо-
значения:
     - символ «::=» отделяет левую часть правила от правой (читается:
«определяется как»);
     - нетерминалы обозначаются произвольной символьной строкой, за-
ключенной в угловые скобки «<» и «>»;
     - терминалы - это символы, используемые в описываемом языке;
     - правило может определять порождение нескольких альтернативных
цепочек, отделяемых друг от друга символом вертикальной черты «|» (читается:
«или»).
     Пример 2.2. Определение понятия «идентификатор» с использованием
БНФ имеет вид:
     <идентификатор> ::= <буква> | <идентификатор> <буква>
                                            | <идентификатор> <цифра>
     <буква> :: = 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
     <цифра> :: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
                        Расширенные формы Бэкуса-Наура (РБНФ)
      Для повышения удобства и компактности описаний, в РБНФ вводятся
следующие дополнительные конструкции (метасимволы):
      - квадратные скобки «[» и «]» означают, что заключенная в них синтак-
сическая конструкция может отсутствовать;
      - фигурные скобки «{» и «}» означают повторение заключенной в них
синтаксической конструкции ноль или более раз;
      - сочетание фигурных скобок и косой черты «{/» и «/}» используется
для обозначения повторения один и более раз;
      - круглые скобки «(» и «)» используются для ограничения альтернатив-
ных конструкций.
      Пример 2.3. В соответствии с данными правилами синтаксис модельного
языка М будет выглядеть следующим образом:
     <буква> ::= 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
     <цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
     <идентификатор> ::= <буква> { <буква> | <цифра> }
     <число> ::= {/< цифра> /}
     <ключевое_слово> ::= program | var | begin | end | int | bool | read | write | if |

                                                                                                            6