niby proste a juz 2 dni to kombinuje (txt->lista)

0

nie problem wstawic cale linijki z pliku.txt na liste jednokierunkową
ale potrzebuje wstawic kod źródlowy wpisując do kolejnego rekoru oddzielnie slowa i znaki np: z "var s,p:string;" zrobic:

var

s
,
p
:
string
;

jesli możecie mi pomóc to prosilbym o procedure wczytywania z pliku na liste(tworzac ją) lub procedure zmiany lisy wypelnionej linijkami tekstu na liste wypelnioną slowami i znakami.
będę bardzo wdźięczny, dźieki!

0

Czytasz po znaku i jezeli natrafisz na inny znak niz (['a'..'z'] or [A..Z]) to kopiujesz fragment od miejsca gdzie ostatnio zaczales do tego znaku i czytasz dalej.

0

a co mu to da?? przecież musi obsłuzyć znaki ; , . : = + - itd/.../.

0

spoko mogę napisać "if s[j] in['.',' ',')','>','<','(',',',';',':','[',']'] then"
ale albo jestem glupi albo coś źle robię, ale to nie dziala mi, więc jeśli masz jakiś pomysl to napisz prosze calą procedurę.

0

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

user image

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 :)

0

teraz juz wiem dlaczego mi nie wychodzilo, kombinowalem, ale jestem raczej poczatkujacy i znam raczej podstawy jezyka.
bylbym wiec wdźięczny jeśli komuś chcialoby się w celach edukacyjnych napisac mi calą taka przykladową procedurke bo ja chyba nie dam rady.
wystardzy ze bedzie odrozniac slowa od znaków.
bylbym bardo wdźieczny za pomoc no i mam nadzieję że da to wam trochę roboty i przyprawi o maly ból glowy :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1