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 найден в таблице ключевых слов) «Висящая» – переход в состояние ошибки