Итак, я изучаю конструкцию компилятора для экзамена, но мне кажется, что я чего-то не понимаю.
Давайте предположим следующий набор терминалов:
T = {:, *, =, (, ), <, >, {, }, [a..z], [0..9]}
И набор принятых токенов (l
указывает на букву, а d
указывает на цифру):
A = { l(l|d)* , (d)+ , { (anything)* } , : , := , < , <= , <> , > , >= , ( , (* , * , *) }
Вот диаграмма перехода состояний:
Теперь я понимаю, что номер состояния 20 нуждается в возврате, потому что:
- A
(
может прийти, но за ним может следовать *
.
- A
:
может прийти, но за ним может последовать =
.
- A
<
может прийти, но за ним может следовать =
или >
.
- A
>
может прийти, но за ним может последовать =
.
А как быть с состояниями 3 , 5 и 11 ? зачем нам их возвращать?