Uploaded by denis.tchizhoff2017

Конечный автомат языка миниС

advertisement
Digit, value= (-1) * Digit
Digit, value=value*10 ± Digit
–
other, ret(opminus), 
6
1
«+» - если считываем
положительное число,
«-» - если отрицательное!
Digit, value=Digit
other, ret(num, value), 
!
<
other, ret(opnot), 
=, ret(opne)
7
8
‘, value=“”
other, ret(oplt), 
=, ret(ople)
‘
Punct, ret(Punct)
=
9
|
10
11
0
other
*, ret(opmult)
Letter, value += Letter
other
other, ret(id, value)
ИЛИ
ret(keyword), 
“, value=“”
“, ret(str, value)
$
4
&
12
&, ret(opand)
other
other
Letter, value=Letter
other, ret(opplus), 
+, ret(opinc)
|, ret(opor)
3
$, ret(eof)
other, ret(opassign), 
=, ret(opeq)
ws
+
other, value=other
2
other, value += Other
5
Digit, value += Digit
Digit = [0-9] Letter = [a-zA-Z_] $ = конец входного потока
ws = пробел, табуляция, перенос строки
other = любой другой символ, кроме тех, что на исходящих стрелках
для данного состояния
ret(токен, значение) – генерация анализатором соответствующего
токена (со значением, если есть)
 – возврат текущего символа «обратно» в поток
Punct = ( ) { } [ ] ; , .
ret(Punct) – возврат лексемы, соответствующей считанному знаку
пунктуации
ret(keyword) – возврат токена ключевого слова (когда keyword
найден в таблице ключевых слов)
«Висящая»
– переход в состояние ошибки
Download