Tag Archive for 'compiler'

Cannot construct the infinite type.

2031 errors

0

Wenn man den gesamten Quellcode der Living Library frisch aus dem Repository auscheckt (und vergißt, alle Bibliotheken mit einzubinden), dann produziert das Kompilieren ganze 2031 Fehler und 1 Warnung. Nett.

Building war

0

Es gab mal diesen Witz mit dem netten Compiler-Tool make, der mittlerweile nicht mehr so schön funktioniert. Etwas recht ähnliches ist mir neulich bei ant aufgefallen, dem Java-Pendant zu make, im Zusammenhang mit Tomcats Web Archive Format.

[war] Building war: /workspace/ll/livinglibrary.war

Ist zwar nicht mal halb so lustig, aber ein schöner Gegensatz zu make love und leider wohl auch zeitgemäßer…

Abgabe

3

Gestern vormittag war die Deadline für den zweiten Teil des Compilerbau-Projekts und ich muß sagen, daß ich heilfroh bin, daß das endlich vorbei ist. Zwar habe ich in keiner Vorlesung bisher so viel gelernt, sowohl neue Konzept (Baumautomaten und abstrakte Syntaxbäume), als auch altbekanntes endlich ganz verstanden (warum case-Statements immer ein break am Ende brauchen). Dafür war aber der Frustfaktor auch ziemlich hoch. Wie oft hätte ich meinen Rechner am liebsten getretten wegen der scheiß C-Grammatik.

Jetzt geht’s aber gleich munter weiter: mit Klausuren. Morgen erstmal Differential Equations und am Samstag noch die Miniklausur zum Compilerbau. Irgendwie werde ich auch das überstehen und dann sind Ferien. Naja, nicht wirklich, denn ich habe ja da noch mein DFKI. Und außerdem wollte ich auch endlich mal mit meiner Diplomarbeit anfangen, die seit einem halben Jahr im Schreibtisch vergammelt. Eigentlich war ja die Idee, schnell fertig zu werden, damit ich endlich von hier verschwinden kann. Aber das muß wohl noch ein wenig warten.

Trotzdem wird es dann ein wenig ruhiger werden, man kann ausschlafen und auch endlich ein paar dieser Sachen machen, die man immer lieber machen wollte, als lernen, Übungblätter lösen oder Folien durcharbeiten!

a ↑ b

0

Das ist der Pfeil-Operator der Informatiker-Legende Donald Knuth. Die Idee dahinter ist, daß arithmetische Operationen wie Multiplikation und Potenzierung verkürzte Schreibweisen sind, also a*3 = a+a+a und a3 = a*a*a usw.

Der Pfeil-Operator macht im Prinzip nichts anderes als das. a ↑↑ 3 = aaa. Aber das wäre viel zu einfach! Daher gibt es noch die Möglichkeit, da ein wenig Rekursion reinzubringen. Man kann nämlich mehrere Pfeil hintereinanderschreiben, also etwa a ↑↑↑ 3 = a ↑↑ a ↑↑ a = …

Und dieses Zeugs darf ich jetzt in meinen Compiler einbauen :-D

Changeset 30

0

Mein erstes switch-Statement hat gerade fehlerfrei compiliert! Oh Mann, das ist soo cool, wie aus einem kleinen sinnlosen Programm richtiger Assembler-Code entsteht. Zwar ist es für die meisten nicht gerade erhellend, aber ich muß das einfach posten :-)

# CS 561 : Compiler Construction
# Summer 2006
# SPIM S20 MIPS simulator.
# MIPS code for test/switch.c

.globl main
main:
addu $s7, $0, $ra
addi $tt0, $0, 3
addi $s0, $0, 4
la $s2, jt_0

# handle switch value not in interval
slt $s2, $tt0, $zero
bne $s2, $0, .switch_escape_2
slt $s2, $tt0, $s0
beq $s2, $0, .switch_escape_2

# switch performed by using jump table
add $s0, $tt0, $tt0
add $s0, $s0, $s0
add $s0, $s0, $s2
lw $s2, 0($s0)
jr $s2

L0:
addi $tt0, $0, 0
j .switch_escape_2
L1:
addi $tt0, $0, 2
j .switch_escape_2
L2:
addi $tt0, $0, 1
j .switch_escape_2
L3:
addi $tt0, $0, 0
j .switch_escape_2

.switch_escape_2:
addu $ra, $0, $s7
jr $ra
add $0, $0, $0

.data
jt_0: .word L0, L1, L2, L3

Und obwohl es immer noch ziemlich kompliziert ist, macht es im Moment sogar Spaß.

Changeset 6

3

Compiler Construction on tracIn zwei Wochen ist Abgabe für den ersten Teil meines Compilerbau-Projekts, nämlich für die Codegenerierung. Am Anfang habe ich nicht so recht geschnallt, wie man den Code generieren soll, aber heute habe ich endlich die Stelle gefunden, die mir weitergeholfen hat.

Jeder Ausdruck und jedes Statement ist vom Typ Node, und jeder Node hat einen stringstream, an den man einfach die entsprechenden Kommandos schickt. Und in C++ geht das ja so schön:

out << "loadc 5" << std::endl;

Vorher war ich ein wenig skeptisch, ob ich das alles in zwei Wochen schaffe, aber jetzt bin ich eigentlich wieder ganz optimistisch. Aber es wird sicherlich noch die ein oder andere Schwierigkeit geben, da bin ich mir sicher. Und auch so ist es einfach sauviel Arbeit.

Vorbereitungen

0

XSpimIn diesem Semester belege ich ja die Vorlesung “Compiler Construction” während der man als Software-Projekt einen Compiler für ein vereinfachtes C schreiben muß. Da ich Compiler, vor allen Dingen die GCC, schon immer sauspannend fand, bin ich natürlich recht heiß drauf, endlich loszulegen.

Zuerst einmal braucht der Compiler einen Namen, den er auch schon hat: RoCCo. Nachdem diese überaus wichtige Entscheidung gefallen ist, kann man sich nebensächlicheren Dingen zuwenden, nämlich etwa der Frage nach der Entwicklungsumgebung. Zuerst wollte ich mit Apples XCode arbeiten, aber dann habe ich mich doch für Eclipse mit CDT entschieden. Open Source geht halt vor ;-) .

Jetzt werde ich mir mal die Projektdokumentation durchlesen, und sehen, wo und vor allen Dingen wie ich anfange. Da habe ich nämlich keinen blaßen Schimmer.

Update: Gerade eben habe ich den Emulator für die MIPS-Architektur compiliert, der netterweise SPIM heißt. Einen Screenshot davon findet man oben. Für diese Architektur soll der Compiler nämlich geschrieben werden. Sie ist zwar nicht so bekannt, wird aber in der PSP und der PS2 eingesetzt. Außerdem basiert auch der G4 meines PowerBooks auf MIPS.




Flickr

RSS
Der Boss singt mit einem kleinen Jungen aus dem PublikumBoss-PanoramaDer Boss!DarkoDarko

Twitter

    digg