Die Parrot Intermediate Representation, oder kurz: PIR, ist eine an PASM angelehnte Sprache. Jedoch ist sie wesentlich einfacher zu lesen und schreiben.
$ cat einfuehrung.pir
.sub main
I0 = 42 # Zuweisung
N10 = 3.14 # Zuweisung
I1 = 6 * 7 # Arithmetik
N4 = sqrt I1 # Funktionsaufrufe
S1 = "So Long, "
S2 = S1 . "and Thanks for All the Fish" # Zeichenkettenoperationen
print I0
print "\n"
print N10
print "\n"
print I1
print "\n"
print N4
print "\n"
print S2
print "\n"
.end
$ parrot einfuehrung.pir
42
3.140000
42
6.480741
So Long, and Thanks for All the Fish
In PASM ist man für die Belegung von Registern selbst verantwortlich. Dies führt vor allem bei umfangreichen Programmen schnell zu Fehlern. In PIR kann man die Verwaltung der Register dem PIR-Compiler übernehmen lassen.
Zum einen gibt es beliebig viele nummerierte symbolische Register. Der PIR-Compiler bildet diese auf die 32 vorhandenen ab. Sollten mehr als 32 symbolische Register in Benutzng sein, sichert der PIR-Compiler die zu Zeit nicht benötigten und stellt diese auch wieder her.
$ cat symbolische_register.pir
.sub main
$I0 = 42
$I9999999 = 42
print $I0
print " "
print $I9999999
print "\n"
.end
$ parrot einfuehrung.pir
42 42
Eine weitere Möglichkeit um Register anzusprechen sind Variablen. Diese werden wie die symbolischen Register auf die tatsächlichen Register abgebildet.
$ cat variablen.pir
.sub main
.local int answer
.local num PI, e
answer = 42
PI = 3.14
e = 2.7
print answer
print " "
print PI
print " "
print e
print "\n"
.end
$ parrot variablen.pir
42 3.140000 2.700000
In PASM sind Unterprogramme simple Sprungziele. Im Gegensatz dazu gibt es in PIR richtige Funktionen. Auch die Parameterübergabe ist einfacher und wird durch den PIR-Compiler beim kompilieren geprüft.
$ cat unterprogramme.pir
.sub main
.local int a
.local num b
.local string c
(a, b, c) = foo(1, "blah")
print a
print " "
print b
print " "
print c
print "\n"
.end
.sub foo
.param int n
.param string message
# Hier könnte ihr Quelltext stehen
.return (42, 3.14, "Hallo Pauli")
.end
$ parrot unterprogramme.pir
42 3.140000 Hallo Pauli
Erstellt von Johannes Barop