'{: posCur:= AP_COMMSG;
',#10,#13,#9:;
else posCur:= AP_ERR;
end{case list};
end;
AP_LT: { Знак меньше или знак неравенства? }
case sCurStr[j] of
'b': AddKeyToList(LEX_LT,AP_BEGIN1);
'i': AddKeyToList(LEX_LT,AP_IF1);
'p': AddKeyToList(LEX_LT,AP_PROG1);
'e': AddKeyToList(LEX_LT,AP_ELSE1);
'w': AddKeyToList(LEX_LT,AP_WHILE1);
'd': AddKeyToList(LEX_LT,AP_DO1);
'o': AddKeyToList(LEX_LT,AP_OR1);
'x': AddKeyToList(LEX_LT,AP_XOR1);
'a': AddKeyToList(LEX_LT,AP_AND1);
'n': AddKeyToList(LEX_LT,AP_NOT1);
'>: AddKeyToList(LEX_NEQ,AP_SIGN);
'-: Add2KeysToList(LEX_LT,LEX_UMIN,AP_SIGN);
'(: Add2KeysToList(LEX_LT,LEX_OPEN,AP_SIGN);
'0.. 9 : AddKeyToList(LEX_LT,AP_CONST);
'A'..'Z','c','f'..'h','j'..'m','q'..'v',
'y','z', _ : AddKeyToList(LEX_LT,AP_VAR);
'{: AddKeyToList(LEX_LT,AP_COMMSG);
',#10,#13,#9: AddKeyToList(LEX_LT,AP_SIGN);
else posCur:= AP_ERR;
end{case list};
AP_ELSE1: { «else», или же «end», или переменная? }
case sCurStr[j] of
'l': posCur:= AP_ELSE2;
'n': posCur:= AP_END2;
':: AddVarToList(AP_ASSIGN,j);
'-: AddVarKeyToList(LEX_SUB,AP_SIGN);
'+: AddVarKeyToList(LEX_ADD,AP_SIGN);
'=: AddVarKeyToList(LEX_EQ,AP_SIGN);
'>: AddKeyToList(LEX_GT,AP_SIGN);
'<: AddVarToList(AP_LT,j);
'(: AddVarKeyToList(LEX_OPEN,AP_SIGN);
'): AddVarKeyToList(LEX_CLOSE,AP_START);
';: AddVarKeyToList(LEX_SEMI,AP_START);
'{: AddVarToList(AP_COMM,j);
'0.. 9 ,'A'..'Z','a'..'k','m',
'o'..'z', _ : posCur:= AP_VAR;
',#10,#13,#9: AddVarToList(AP_START,j);
else posCur:= AP_ERR;
end{case list};
AP_IF1: KeyLetter('f',AP_IF2);
AP_IF2: KeyFinish(LEX_IF);
AP_ELSE2: KeyLetter('s',AP_ELSE3);
AP_ELSE3: KeyLetter('e',AP_ELSE4);
AP_ELSE4: KeyFinish(LEX_ELSE);
AP_OR1: KeyLetter('r',AP_OR2);
AP_OR2: KeyFinish(LEX_OR);
AP_DO1: KeyLetter('o',AP_DO2);
AP_DO2: KeyFinish(LEX_DO);
AP_XOR1: KeyLetter('o',AP_XOR2);
AP_XOR2: KeyLetter('r',AP_XOR3);
AP_XOR3: KeyFinish(LEX_XOR);
AP_AND1: KeyLetter('n',AP_AND2);
AP_AND2: KeyLetter('d',AP_AND3);
AP_AND3: KeyFinish(LEX_AND);
AP_NOT1: KeyLetter('o',AP_NOT2);
AP_NOT2: KeyLetter('t',AP_NOT3);
AP_NOT3: KeyFinish(LEX_NOT);
AP_PROG1: KeyLetter('r',AP_PROG2);
AP_PROG2: KeyLetter('o',AP_PROG3);
AP_PROG3: KeyLetter('g',AP_PROG4);
AP_PROG4: KeyFinish(LEX_PROG);
AP_WHILE1: KeyLetter('h',AP_WHILE2);
AP_WHILE2: KeyLetter('i',AP_WHILE3);
AP_WHILE3: KeyLetter('l',AP_WHILE4);
AP_WHILE4: KeyLetter('e',AP_WHILE5);
AP_WHILE5: KeyFinish(LEX_WHILE);
AP_BEGIN1: KeyLetter('e',AP_BEGIN2);
AP_BEGIN2: KeyLetter('g',AP_BEGIN3);
AP_BEGIN3: KeyLetter('i',AP_BEGIN4);
AP_BEGIN4: KeyLetter('n',AP_BEGIN5);
AP_BEGIN5: KeyFinish(LEX_BEGIN);
AP_END2: KeyLetter('d',AP_END3);
AP_END3: { «end», или же «end.», или переменная? }
case sCurStr[j] of
'-: Add2KeysToList(LEX_END,LEX_UMIN,AP_SIGN);
'+: Add2KeysToList(LEX_END,LEX_ADD,AP_SIGN);
'=: Add2KeysToList(LEX_END,LEX_EQ,AP_SIGN);
'>: Add2KeysToList(LEX_END,LEX_GT,AP_SIGN);
'<: AddKeyToList(LEX_END,AP_LT);
'(: Add2KeysToList(LEX_END,LEX_OPEN,AP_SIGN);
'):Add2KeysToList(LEX_END,LEX_CLOSE,AP_START);
';: Add2KeysToList(LEX_END,LEX_SEMI,AP_START);
'.: AddKeyToList(LEX_FIN,AP_START);
'0.. 9 ,'A'..'Z','a'..'z', _ :
posCur:= AP_VAR;
'{: AddKeyToList(LEX_END,AP_COMMSG);
',#10,#13,#9: AddKeyToList(LEX_END,AP_SIGN);
else posCur:= AP_ERR;
end{case list};
AP_ASSIGN: { Знак присваивания }
case sCurStr[j] of
'=: AddKeyToList(LEX_ASSIGN,AP_SIGN);
else posCur:= AP_ERR;
end{case list};
AP_VAR: { Переменная }
case sCurStr[j] of
':: AddVarToList(AP_ASSIGN,j);
'-: AddVarKeyToList(LEX_SUB,AP_SIGN);
'+: AddVarKeyToList(LEX_ADD,AP_SIGN);
'=: AddVarKeyToList(LEX_EQ,AP_SIGN);
'>: AddVarKeyToList(LEX_GT,AP_SIGN);
'<: AddVarToList(AP_LT,j);
'(: AddVarKeyToList(LEX_OPEN,AP_SIGN);
'): AddVarKeyToList(LEX_CLOSE,AP_START);
';: AddVarKeyToList(LEX_SEMI,AP_START);
'0.. 9 ,'A'..'Z','a'..'z', _ :
posCur:= AP_VAR;
'{: AddVarToList(AP_COMM,j);
',#10,#13,#9: AddVarToList(AP_START,j);
else posCur:= AP_ERR;
end{case list};
AP_CONST: { Константа }
case sCurStr[j] of
':: AddConstToList(AP_ASSIGN,j);
'-: AddConstKeyToList(LEX_SUB,AP_SIGN);
'+: AddConstKeyToList(LEX_ADD,AP_SIGN);
'=: AddConstKeyToList(LEX_EQ,AP_SIGN);
'>: AddConstKeyToList(LEX_GT,AP_SIGN);
'<: AddConstToList(AP_LT,j);
'(: AddConstKeyToList(LEX_OPEN,AP_SIGN);
'): AddConstKeyToList(LEX_CLOSE,AP_START);
';: AddConstKeyToList(LEX_SEMI,AP_START);
'0.. 9 : posCur:= AP_CONST;
'{: AddConstToList(AP_COMM,j);
',#10,#13,#9: AddConstToList(AP_START,j);
else posCur:= AP_ERR;
end{case list};
AP_COMM: { Комментарий с начальной позиции }
case sCurStr[j] of
'}: posCur:= AP_START;
end{case list};
AP_COMMSG: { Комментарий после знака операции }
case sCurStr[j] of
'}: posCur:= AP_SIGN;
end{case list};
end{case pos};
if j = iStr then { Проверяем конец строки }
begin { Конец строки – это конец текущей лексемы }
case posCur of
AP_IF2: AddKeyToList(LEX_IF,AP_SIGN);
AP_PROG4: AddKeyToList(LEX_PROG,AP_START);
AP_ELSE4: AddKeyToList(LEX_ELSE,AP_START);
AP_BEGIN5: AddKeyToList(LEX_BEGIN,AP_START);
AP_WHILE5: AddKeyToList(LEX_WHILE,AP_SIGN);
AP_END3: AddKeyToList(LEX_END,AP_START);
AP_OR2: AddKeyToList(LEX_OR,AP_SIGN);
AP_DO2: AddKeyToList(LEX_DO,AP_SIGN);
AP_XOR3: AddKeyToList(LEX_XOR,AP_SIGN);
AP_AND3: AddKeyToList(LEX_AND,AP_SIGN);