.xflag 3 .nr PS +8 .nr VS +8 .vs +8 .pl +1 .TL Syntax-Vergleich einer Auswahl imperativer Programmiersprachen .AU .ps -6 markus schnalke .ev 1 . in +8n .ev .de C1 .sp . br . ev 1 . ft CW . ta T 8n . nf .. .de C2 . br . ev 0 .. .LP Dies ist eine Liste von Beispielprogrammen in einer Auswahl verschiedener imperativer Programmiersprachen. Implementiert wurde jeweils die gleiche Semantik, naemlich der Euklidische Algorithmus zur Ermittlung des .I "groessten gemeinsamen Teilers" . .PP Die Beispiele sollen die Unterschiede und Gemeinsamkeiten in der Syntax verdeutlichen. Verglichen werden sollten insbesondere die Zuweisungs- und Vergleichsoperatoren, die Ergebnisausgaben und die Notationen fuer Blockstrukturen und zur Anweisungstrennung. .sp |16.5c .SH Pascal (1972) .LP .C1 \f(CBprogram\fP ggt; \f(CBvar\fP x, y: \f(CBinteger\fP; \f(CBbegin\fP x := 15; y := 6; \f(CBwhile\fP x <> y \f(CBdo\fP \f(CBif\fP x > y \f(CBthen\fP x := x - y \f(CBelse\fP y := y - x; writeln(x) \f(CBend\fP. .C2 .bp .SH Python (1991) .LP .C1 x = 15 y = 6 \f(CBwhile\fP x != y: \f(CBif\fP x > y: x = x - y \f(CBelse\fP: y = y - x print(x) .C2 .sp |16.5c .SH Java (1991) .LP .C1 \f(CBpublic\fP \f(CBclass\fP Ggt { \f(CBpublic\fP \f(CBstatic\fP \f(CBvoid\fP main(String[] args) { \f(CBint\fP x = 15; \f(CBint\fP y = 6; \f(CBwhile\fP (x != y) \f(CBif\fP (x > y) x = x - y; \f(CBelse\fP y = y - x; System.out.println(x); } } .C2 .bp .SH C (1972) .LP .C1 \f(CB#include\fP \f(CBint\fP main() { \f(CBint\fP x=15, y=6; \f(CBwhile\fP (x != y) { \f(CBif\fP (x > y) { x -= y; } \f(CBelse\fP { y -= x; } } printf("%d\\n", x); \f(CBreturn\fP 0; } .C2 .sp |16.5c .SH AWK (1977) .LP .C1 \f(CBBEGIN\fP { x=15 y=6 \f(CBwhile\fP (x != y) { \f(CBif\fP (x > y) { x -= y; } \f(CBelse\fP { y -= x; } } print x } .C2 .bp .SH PHP (1995) .LP .C1 $x = 15; $y = 6; \f(CBwhile\fP ($x != $y) { \f(CBif\fP ($x > $y) { $x -= $y; } \f(CBelse\fP { $y -= $x; } } echo $x; .C2 .sp |16.5c .SH Perl (1987) .LP .C1 $x = 15; $y = 6; \f(CBwhile\fP ($x != $y) { $x -= $y \f(CBif\fP ($x > $y); $y -= $x \f(CBif\fP ($x < $y); } print($x, "\\n"); .C2 .bp .SH Bourne Shell (1977) .LP .C1 x=15 y=6 \f(CBwhile\fP [ $x -ne $y ] ; \f(CBdo\fP \f(CBif\fP [ $x -gt $y ] ; \f(CBthen\fP x=`expr $x - $y` \f(CBelse\fP y=`expr $y - $x` \f(CBfi\fP \f(CBdone\fP echo $x .C2 .sp |16.5c .LP Die Codebeispiele stellen jeweils komplette, lauffaehige Programme in der jeweiligen Sprache dar. Deshalb ist insbesondere bei den kompilierten und streng typisierten Sprachen noch etwas ``Overhead'' dabei.