Page 26 - 4625
P. 26
у стек (якщо не повністю автомат, то по меншій мірі в стек
занести вказівник на цей автомат). Перейти на П0.
П2. Якщо поточна лексема код операції, то по її арності
з вершини стека зняти автомати, побудувати результуючий
автомат М залежно від операції:
а) для операції '+':
L(M)= L( ) L( ),
1
2
де: L( ) та L( ) – скінченні автомати, які перебувають на
2
1
вершині стека;
б) для операції '.':
L(M)= L( )* L( ),
2
1
де: L( ) та L( ) – скінченні автомати, які перебувають на
1
2
вершині стека;
в) для операції '*':
L(M)= L( ),
1
де: L( ) – скінченний автомат, що перебуває на вершині сте-
1
ка. Побудований нами автомат занести в стек. Перейти на П0.
П3. Якщо досягли кінця регулярного виразу, то на
вершині стека є автомат М, який розпізнає множину слів (лан-
цюжків), які позначає регулярний вираз.
Завдання. Для регулярного виразу : + побудувати
∗
скінченний автомат, який розпізнає множину ланцюжків, що
позначаються цим виразом.
2.7 Застосування скінчених автоматів при розробці
лексичних аналізаторів
Поділ множини лексем мови програмування на класи
можна виконати на основі різних критеріїв, наприклад, мно-
жину операцій в мові С можна розбити на три класи:
однолітерні коди операцій: +, -, *, / …;
дволітерні коди операцій: >=, ++, --, …;
трилітерні коди операцій: >>=, <<=, ….
25