есть ли грамматика удаления в lex и yacc? - PullRequest
0 голосов
/ 02 января 2019

В общей грамматике в lex и yacc,

A : aB
B : bc

Приведенная выше грамматика может вывести «abc» в символ «A»

Далее, я хочу преобразовать 'A' в 'S' с помощью операции удаления

например,

S : A`delete(c)`

объединяет всю грамматику выше, и мы можем вывести 'ab' в 'S'

есть ли похожая грамматика в lex и yacc?

1 Ответ

0 голосов
/ 02 января 2019

Нет, нет.

(F) Шаблоны lex по сути являются регулярными выражениями математического разнообразия с некоторыми вспомогательными операторами (такими как классы символов).(F) lex не реализует множество нерегулярных операторов регулярных выражений, встречающихся в большинстве библиотек регулярных выражений.Теоретически, можно реализовать оператор разности множеств без отклонения от обычного определения языка регулярного выражения, поскольку регулярные языки замкнуты над конъюнкцией и инверсией.На практике реализация этого оператора встречается редко.(У генератора машин Ragel stare есть его, но я не знаю ни одной библиотеки регулярных выражений, которая бы это делала.)

Yacc / bison реализует только контекстно-свободные грамматики, описанные в BNF.Языки без контекста не закрыты по инверсии или соединению, поэтому трудно понять, как любой генератор синтаксического анализатора CFG-basef может справиться с такой функцией.

...