Re: Посоветуйте формальную грамматику
От: hexis  
Дата: 04.10.08 04:44
Оценка:
eaglus wrote:
>
> Есть ли какие-то методы для формального описания таких "нестрогих"
> грамматик?


Насчет организации грамматики уже написали — вам не нужно отслеживать
всю структуру языка, то есть все правила будут выскокоуровневыми. Кроме
того, есть два предложения:

1) Использовать отсечки как в прологе. Отсечка обозначает точку к
которой проиваодится возврат. Например в правиле:

S = 'unit' ! identifier ';'

парсер, встретив во входном потоке слово 'unit' не возвращается назад —
правило считается выполненным.

2) Использовать правила синхронизации или разбиения на выражения при
возникновении ошибки, как в yacc. Например, предыдущее выражение
запишется так:

S = 'unit' ! ( identifier ';' | error ';' )

Здесь запись error ';' обозначает, что при возникновении ошибки, правило
считается выполненым, ошибка игнорируется ее и входной поток читается до
символа точки с запятой. Конечно, в качестве синхронизирующей
последовательности можно использовать регулярное выражение.

Так же можно применять одно правило синхронизации ко нескольким
выражениям, и совместить это с отсечками. Что-то наподобие:

S = 'procedure' {{ identifier arg-decl }} ';'
S = 'function' {{ identifier arg-decl }} ';'
S = 'class' {{ identifier '{' }} '}.*;'

Здесь лексема {{ показывает начало отсечки, а то, что следует за }} —
правило синхронизации.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.