Бэкуса-Наура формы (БНФ)

Метаязык Хомского-Щутценберже

Метаязык Хомского

Метаязык Хомского вышел из недр математической логики. Он имеет следующую систему обозначений:

  • символ “ ® ” отделяет левую часть правила от правой (читается как "порождает" и "это есть");
  • нетерминалы обозначаются буквой А с индексом, указывающим на его номер;
  • терминалы - это символы используемые в описываемом языке;
  • каждое правило определяет порождение одной новой цепочки, причем один и тот же нетерминал может встречаться в нескольких правилах слева.

Описание идентификатора на метаязыке Хомского будет выглядеть следующим образом:

1. A1 ® A 23. A1 ® W 45. A1 ® s
2. A1 ® B 24. A1 ® X 46. A1 ® t
3. A1 ® C 25. A1 ® Y 47. A1 ® u
4. A1 ® D 26. A1 ® Z 48. A1 ® v
5. A1 ® E 27. A1 ® a 49. A1 ® w
6. A1 ® F 28. A1 ® b 50. A1 ® x
7. A1 ® G 29. A1 ® c 51. A1 ® y
8. A1 ® H 30. A1 ® d 52. A1 ® z
9. A1 ® I 31. A1 ® e 53. A2 ® 0
10. A1 ® J 32. A1 ® f 54. A2 ® 1
11. A1 ® K 33. A1 ® g 55. A2 ® 2
12. A1 ® L 34. A1 ® h 56. A2 ® 3
13. A1 ® M 35. A1 ® i 57. A2 ® 4
14. A1 ® N 36. A1 ® j 58. A2 ® 5
15. A1 ® O 37. A1 ® k 59. A2 ® 6
16. A1 ® P 38. A1 ® l 60. A2 ® 7
17. A1 ® Q 39. A1 ® m 61. A2 ® 8
18. A1 ® R 40. A1 ® n 62. A2 ® 9
19. A1 ® S 41. A1 ® o 63. A3 ® A1
20. A1 ® T 42. A1 ® p 64. A3 ® A3A1
21. A1 ® U 43. A1 ® q 65. A3 ® A3A2
22. A1 ® V 44. A1 ® r  

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

  • символ “=” отделяет левую часть правила от правой (вместо символа “ ® ”);
  • нетерминалы обозначаются буквой А с индексом, указывающим на его номер;
  • терминалы - это символы используемые в описываемом языке;
  • каждое правило определяет порождение нескольких альтернативных цепочек, отделяемых друг от друга символом “+”, что позволяет, при желании, использовать в левой части только разные нетерминалы.

Введение возможности альтернативного перечисления позволило сократить описание языков. Описание идентификатора будет выглядеть следующим образом:

1. A 1 =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

2. A 2 =0+1+2+4+5+6+7+8+9

3. A 3 =A 1 +A 3 A 1 +A 3 A 2

Метаязыки Хомского и Хомского-Щутценберже использовались в математической литературе при описании простых абстрактных языков. Метаязык, предложенный Бэкусом и Науром, впервые использовался для описания синтаксиса реального языка программирования Алгол 60. Наряду с новыми обозначениями метасимволов, в нем использовались содержательные обозначения нетерминалов. Это сделало описание языка нагляднее и позволило в дальнейшем широко использовать данную нотацию для описания реальных языков программирования. Были использованы следующие обозначения:

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

Пример описания идентификатора с использованием БНФ:

1. <буква>:: = А|В|С|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

2. <цифра>:: = 0|1|2|3|4|5|6|7|8|9

3. <идентификатор>::= <буква> | <идентификатор><буква> |
<идентификатор><цифра>

Правила можно задавать и раздельно:

3. <идентификатор>:: = <буква>

4. <идентификатор>:: = <идентификатор> <буква>

5. <идентификатор>:: = <идентификатор> <цифра>


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: