КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Представление автоматов
Некоторые приемы приведения к грамматикам простого предшествования. Грамматика для списков (которые очень часто встречаются): переменные, параметры, индексы. <L>→λ <L>→a<R> <R>→, a<R> <R>→λ Предположим, что некоторая грамматика содержит такие 2 правила: <S>→ if <B> then <S1> <S>→ if <B> then <S1> else <S2> Эта грамматика не может быть LL(1) грамматикой, т.к. if содержится во множествах выбора обоих правил. При построении LL(1) грамматик важно, чтобы конструкции языка, начинающиеся с одинаковых символов, порождались одним общим для них правилом. Для рассматриваемого примера можно получить. <S>→ if <B> then <S1><нечто> <нечто>→ else <S2>|λ Про такие правила говорят, что они получены из первоначальных двух методом «левой факторизации». Грамматика с леворекурсивным нетерминалом не может быть LL(1) грамматикой. Грамматику с левой рекурсией всегда можно представить в грамматику без левой рекурсии. Основная идея состоит в том, чтобы смотреть на рекурсивный нетерминал как на порождающий некоторую цепочку, за которой следует список из одного или более элементов. Например: <S>→<S>a <S>→b Трактуем нетерминал <S> как порождающий символ b, за которым следует список из нуля или символов a. <A>→b<список> <список>→a <список>|λ Если приведенное выше правило преобразования объединить с заменой края, то его можно использовать для исключения леворекурсивности, даже когданекоторые леворекурсивные правила не являются самолеворекурсивными. 1.A→a<B> 2.A→ab A→a<B><список> A→abc<список> A→<A>cb <B>→ <A>b <B>→d <список>→cb<список>|λ <B>→<A> <B>→d (Замена края: Для правил <A>→α1 … <A>→αn <B>→ β<A>γ <B>→βα1γ … <B>→ βαnγ) Исключение λ-правил Пусть есть две разновидности нетерминала А: < Ада >(с λ -правилами) и < Анет > <S>→a<A><S> <S>→a<Анет><S> <S>→b <S>→a<Ада><S> <A>→c<S> <S>→b <A>→λ <Aнет>→c<S> <Aда>→λ (однозначное правило, которое можно исключить) <S>→a<Анет><S> <S>→a<S> <S>→b <Aнет>→c<S>
Можно опять перейти к нетерминалу A,но из него уже не выводима пустая цепочка. <S>→a<A><S> <S>→a<S> <S>→b <A>→c<S> Общие правила в методике исключение λ -правил: 1. Определить, какие нетерминалы грамматики могут порождать пустую цепочку 2. Заменить каждое из правил, правые части которых содержат хотя бы по одному аннулирующему нетерминалу, множеством новых правил. 3. Исключить из грамматики все λ -правила, включая те, которые могли появиться на шаге 2.
Один из удобных способов представления КА – таблица переходов. КА с состояниями S1,…,Sn и входными литерами Т1,…,Тn можно представить в виде матрицы В, состоящей из n x m элементов. Элемент B[i,j ] содержит число k – номер состояния Sk, такое что M[Si,Tj]=Sk. Можно условиться, что состояние S1 – начальное, а список заключённых состояний представлен вектором Такая матрица называется матрицей переходов, т.к. она указывает, каким образом происходит переключение из одного состояние в другое. Другим способом представления может быть списочная структура. Представление каждого состояния с k дугами, исходящими из него, занимает 2k+2 слов. Первое слово – имя состояния, второе – значение k. Каждая последующая пара слов содержит терминальный символ из входного алфавита и указатель на начало представления состояния, в которое надо перейти по этому символу.
Дата добавления: 2014-01-11; Просмотров: 431; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |