Własny język programowania. Część 3: Reprezentacja i interpretacja języka programowania
13.07.2010 - Maciej Piróg
Część 1. Część 2. Część 3. Część 4. W trzeciej części cyklu stworzymy w końcu "dorosły" (choć bardzo prosty) język programowania przypominający język C oraz napiszemy samo serce interpretera, czyli klasy, które przechowują w pamięci oraz wykonują programy napisane w naszym języku. Programy - napisy czy drzewa?
Napisy Podobnie jest z programami napisanymi w jakimś języku programowania. Porównajmy dwa poniższe programy napisane w C++:
Chociaż formatowanie kodu jest inne, te programy tak naprawdę są takie same. Natomiast poniższy program, choć wynik jego działania jest taki sam, jest inny:
Podobnie jak w przypadku wyrażeń arytmetycznych, będziemy myśleć o programach jako o drzewach. Pierwsze dwa programy mają takie same drzewa, natomiast trzeci program ma inne drzewo. Drzewo pierwszego programu mogłoby wyglądać tak:
Kolor żółty oznacza instrukcje, zielony - wyrażenia, a pomarańczowy - L-wyrażenia (czyli takie, które mogą znaleźć się po lewej stronie znaku '=').
Bardzo ważną obserwacją jest to, że drzewa równoważnych programów zapisanych w różnych językach programowania są bardzo podobne i abstrahują od tego, jak poszczególne instrukcje są zapisane w języku (np. czy bloki wyrażeń oddzielamy nawiasami
InstrukcjeNasz język programowania będzie językiem imperatywnym, więc działającym w stylu języka C. W takim języku są dwa rodzaje instrukcji: Instrukcje proste to np. instrukcja przypisania. W języku C++ instrukcja taka ma postać:
W naszym języku dodatkowo będziemy mieli oddzielne instrukcje do wypisywania wartości zmiennej na ekran i wczytywania zmiennej z wejścia.
Instrukcje złożone to instrukcje powstałe ze złożenia innych instrukcji i wyrażeń arytmetycznych. Przykładem instrukcji złożonej jest warunek
Szczególnym przypadkiem instrukcji złożonej jest instrukcja złożenia, która łączy instrukcje w ciąg. Instrukcje w ciągu wykonywane są po kolei. W języku C++ ma ona postać bloku:
Możemy więc myśleć o całym programie jako o pojedynczej instrukcji, która najczęściej jest złożeniem wielu instrukcji. Przykładowo, przeanalizujmy ciało znanej już nam funkcji:
Zawartość tej funkcji to instrukcja będąca złożeniem 3 instrukcji: przypisania, pętli i operatora
(1 ocena) |
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com