muszę Wam powiedzieć, że to nie będzie takie proste na jakie wygląda. Na poczętek poczytaj o automatach skończonych i zdefiniuj sobie z czego może się składać i jak się zaczyna symbol (nie wiem, jak to nazwać, ale chodzi mi o wszelkiego raodzaju nazwy zmiennych, stałych, procedur, funkcji, etykiet, słowa kluczowe - jednym słowem to co musi się zaczynać od litery i może się składać z określonych znaków), następnie liczba, znak przypisania, porównania (<> powinien być zapisany razem bo to jeden znak), znaki oddzielające (np. spacja, przecinek, średnik, kropka, dwukropek, pojedyńczy cudzysłów) oraz text, czyli ciąg znaków między cudzysłowami bo należy go traktować jako jedną zmienną. To chyba wszystkie elementy. Np. DAS dla symbolu będzie wyglądał mniej więcej tak
tam te kułka to od lewej powinny być jeszcze q0 q1 i q2(END)
i teraz wczytujesz kolejne znaki. Jeśli pierwszy jest literą to wiesz, że będzie to nasz "symbol" i wiesz, jakie znaki mogą w nim wystąpić a jakie go kończą. Idąc za Twoim przykładem var s,p:string; będzie to tak:
jesteś w q0, pobierasz v i skaczesz do q1 Wy: v
q1 pobierasz a i skaczesz do q1 Wy: va
q1 pobierasz r i skaczesz do q1 Wy: var
q1 pobierasz {spacja} i skaczesz do END bez dodawania spacji do wyjścia i bez cofania się i dalej
q0 pobierasz s i skaczesz do q1 Wy: s
q1 pobierasz {przecinek} i skaczesz do END bez dodawania go do wyjścia i cofasz się
q0 pobierasz {przecinek} i powinieneś skoczyć do np. q3 gdzie byłby akurat ten przypadek rozwiązany.
Potem bardzo łądnie to się koduje na pętlach i ifach (case'ach).
Mam nadzieję, że nie namieszałem Ci za bardzo :)