Разработка компиляторов

       

Форма Бэкуса-Наура


Перейдем теперь к рассмотрению наиболее распространенных способов задания синтаксиса современных языков программирования. Естественно, наиболее часто используется какой-то вид формальных грамматик. Однако, с помощью формальной грамматики определяется только контекстно-независимая составляющая языка. Поэтому для реальных языков программирования мы не можем в общем случае сказать, что полученная с помощью такой грамматики цепочка терминалов является синтаксически правильной программой, так как правильная программа должна удовлетворять еще контекстным условиям.

Один из наиболее распространенных способов описания синтаксиса языка - это форма Бэкуса-Наура (Backus J.W., Naur P.). Этот способ был разработан для описания Алгола-60, однако, в дальнейшем он использован для многих других языков. При записи грамматики в форме Бэкуса-Наура используются два типа объектов:

  • основные символы (или терминальные символы, в частности, ключевые слова)
  • металингвистические переменные (или нетерминальные символы), значениями которых являются цепочки основных символов описываемого языка. Металингвистические переменные изображаются словами (русскими или английскими), заключенными в угловые скобки (<...>)
  • металингвистические связки (::=, | )

Пример:

<целое> ::= <целое без знака> | + <целое без знака> | - <целое без знака> <целое без знака> ::= <цифра> | <целое без знака> <цифра> <цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Форма Бэкуса-Наура не позволяет задавать контекстные условия. При использовании формы Бэкуса-Наура контекстные условия задаются в словесной форме.



Содержание раздела