Существуют различные способы записи синтаксических правил, что в основном определяется условными обозначениям и ограничениями на структуру правил, принятыми в используемых метаязыках.
Метаязык Хомского вышел из недр математической логики. Он имеет следующую систему обозначений:
символ “->” отделяет левую часть правила от правой (читается как "порождает" и "это есть");
нетерминалы обозначаются буквой А с индексом, указывающим на его номер;
терминалы - это символы используемые в описываемом языке;
каждое правило определяет порождение одной новой цепочки, причем один и тот же нетерминал может встречаться в нескольких правилах слева.
Описание идентификатора на метаязыке Хомского будет выглядеть следующим образом(некоторые примеры):
|
|
|
|
|
|
|
|
|
|
|
|
Более компактное описание возможно с применением метаязыка Хомского-Щутценберже, использующего следующие обозначения метасимволов:
символ “=” отделяет левую часть правила от правой (вместо символа “->”);
нетерминалы обозначаются буквой А с индексом, указывающим на его номер;
терминалы - это символы используемые в описываемом языке;
каждое правило определяет порождение нескольких альтернативных цепочек, отделяемых друг от друга символом “+”, что позволяет, при желании, использовать в левой части только разные нетерминалы.
Введение возможности альтернативного перечисления позволило сократить описание языков. Описание идентификатора будет выглядеть следующим образом:
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
A2=0+1+2+4+5+6+7+8+9
A3=A1+A3A1+A3A2
Нотации Бэкуса-Наура формы (БНФ)
Впервые использовался для описания синтаксиса реального языка программирования Алгол 60. Наряду с новыми обозначениями метасимволов, в нем использовались содержательные обозначения нетерминалов. Это сделало описание языка нагляднее и позволило в дальнейшем широко использовать данную нотацию для описания реальных языков программирования. Были использованы следующие обозначения:
-символ "::=" отделяет левую часть правила от правой;
-нетерминалы обозначаются произвольной символьной строкой, заключенной в угловые скобки "<" и ">";
-терминалы - это символы, используемые в описываемом языке;
-каждое правило определяет порождение нескольких альтернативных цепочек, отделяемых друг от друга символом вертикальной черты "