1. Конечный автомат – таблица Сигнал А Сигнал Б Сигнал В Состояние 0 (начальное) Выполнить Действие A0 Перейти в состояние 1 Выполнить действие Б0 Оставаться в состоянии 0 Выполнить Действие В0 Перейти в состояние 1 Состояние 1 (конечное) Выполнить действие А1 Оставаться в состоянии 1 Выполнить Действие Б1 Перейти в состояние 0 Выполнить Действие В1 Перейти в состояние 0 Состояния Сигналы
3. Конечный автомат – язык А В БА БВ ББА Б....БББВ АААААА ББББАААА БВВБАВВА ... Примеры допустимых последовательностей Б*(В|А)А*((Б|В)Б*(В|А)А*)* Язык ::= ФРАЗА (РАЗДЕЛИТЕЛЬ ФРАЗА)* ФРАЗА = Б*(В|А)А* РАЗДЕЛИТЕЛЬ = Б|В 1 0 1 А,В Б Б,В А
4. Конечный автомат - определение Q — конечное множество состояний автомата; q 0 — начальное состояние автомата F — множество заключительных (или допускающих) состояний Σ — входной алфавит (конечное множество допустимых входных символов), из которого формируются строки, считываемые автоматом; δ — заданное отображение / функция переходов автомата
5.
6. Конечный автомат – реализация Int state = 0; // q0; while(char c = getkey()) { switch(state) { Case 0: goto st0; Case 1: goto st1; } St0: switch(c) { Case 'А': state = 1; goto end; Case 'Б': goto end; Case 'В': state = 1; goto end; } St1: switch(c) { Case 'А': goto end; Case 'Б': state = 0; goto end; Case 'В': state = 0; goto end; } End: } If (state == 1) exit_ok(); // state in F else exit_fail();
7. изоморфизм Сигнал А Сигнал Б Сигнал В Состояние 0 (начальное) Выполнить Действие A0 Перейти в состояние 1 Выполнить действие Б0 Оставаться в состоянии 0 Выполнить Действие В0 Перейти в состояние 1 Состояние 1 (конечное) Выполнить действие А1 Оставаться в состоянии 1 Выполнить Действие Б1 Перейти в состояние 0 Выполнить Действие В1 Перейти в состояние 0 Б*(В|А)А*((Б|В)Б*(В|А)А*)* Int state = q0; while(char c = getkey()) { switch(state) { Case 0: goto st0; Case 1: goto st1; } St0: switch(c) { Case 'А': state = 1; goto end; Case 'Б': goto end; Case 'В': state = 1; goto end; } St1: switch(c) { Case 'А': goto end; Case 'Б': state = 0; goto end; Case 'В': state = 0; goto end; } End: } If (state in F) exit_ok(); else exit_fail(); 1 0 1 А,В Б Б,В А
26. Ragel http://www.complang.org/ragel/ Adrian D. Thurston "Parsing Computer Languages with an Automaton Compiled from a Single Regular Expression." In 11th International Conference on Implementation and Application of Automata (CIAA 2006), Lecture Notes in Computer Science, volume 4094, pp. 285-286, Taipei, Taiwan, August 2006. pdf .
30. Ragel host language host language: -C The host language is C, C++, Obj-C or Obj-C++ (default) -D The host language is D -J The host language is Java -R The host language is Ruby -A The host language is C#