Konwersja z języka C do kodu Maszyny RAM

Odpowiedz Nowy wątek
2010-01-22 16:34
misiaq
0

Witam!

Piszę pracę dyplomową pt. "Maszyna RAM - edytor, kompilator, debugger".

Całość pisana jest w AJAXie jaka aplikacja internetowa.

Wszystko byłoby przyjemne i proste, gdyby nie fakt, że muszę zrobić kompilator języka C. Chodzi tu bowiem o kompilację kodu w języku C (oczywiście chodzi o składnię) do języka maszyny RAM. Pod pojęciem Maszyna RAM rozumiemy model procesora.

Chodzi dokładnie o przetłumaczenia takiego czegoś (na górze język źródłowy, niżej docelowy RAM).
http://wm.ite.pl/stud/ram/doc/examples.html#p84

Myślałem nad zastosowaniem yacc'a ale wydaje się to żmudne, chyba że się mylę. Być może jakieś linki na temat tego zagadnienia w yacc'u? Program konwertujący może działać na serwerze /UNIX/ (nie musi być to PHP).

Z góry dziękuję i pozdrawiam!

Pozostało 580 znaków

2010-01-22 16:52
0

http://www.antlr.org/ może to jest lepsze niż yacc. Ale generalnie tak czy siak będziesz musiał zrobić coś podobnego jak w yaccu.

Gramatykę C można znaleźć w Google np: http://www.lysator.liu.se/c/ANSI-C-grammar-y.html


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2010-01-24 14:44
0

Narzędzia typu lex/yacc czy antlr co prawda WYGLĄDAJĄ na straszne i trudne, a w rzeczywistości jest to rozwiązanie na skróty (i to wielkie skróty) w porównaniu do pisania parsera samemu od zera.

Pozostało 580 znaków

2010-01-25 13:51
misiaq
0

Witam!

Dziękują za zainteresowanie.

Od razu mówię, że nie chodzi mi o magiczne rozwiązanie problemu, podanie linka, gotowego programu, etc.

Zastanawiam się jednak, czy nie ma jakiejś pośredniej możliwości wyprodukowania docelowego kodu z języka C. Cały problem polega na tym, że istnieje kilka kompilatorów języka C, jednak do maszyny opartej o stos (stack-based machine), a mój model opiera się tylko o rejestry bezpośredniego dostępu.

Być może, jest jakiś gotowy kompilator C do języka maszyny opartej o rejestry, wtedy wystarczyłoby zmodyfikować wyjście takiego kompilatora, ew. zaimplementować kilka operacji.

Trzeba jednak zaznaczyć, że muszę trzymać się konwencji maszyny podanej w linku wyżej, jedynym dodatkiem może tu być funkcja CALL i RET, która umożliwi implementację funkcji.

Znalazłem coś takiego jak PAWN, kompilator C do kodu binarnego wirtualnej maszyny, jednak niestety opartej o stos. Natrafiłem również na coś takiego jak C2BF (C do kodu BrainF***), jednak implementacja kodu BF do maszyny, byłaby bardzo "nieelegancka" - ogromna ilość instrukcji.

Ciągle "jakimś" rozwiązaniem jest yacc, jednak może istnieje coś, o czym piszę.

Proszę o dalszą pomoc i pozdrawiam!

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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