Eine Programmiersprache ist eine Sprache zur Formulierung von ausführbaren Programmen. Programmierparadigmen und spezielle Anwendungsgebiete können die Sprache prägen. Die Regeln der Sprache sind präzise definiert, damit die Programme automatisch in Maschinenprogramme übersetzt oder interpretiert werden können. Jede Software besteht aus Programmen, die ursprünglich in einer Programmiersprache geschrieben wurden. Sie werden meist in die Maschinensprache des Computers übersetzt und zur Ausführung bereitgehalten.
Programme einer Programmiersprache werden, wie Sätze einer natürlichen Sprache, aus Wörtern und Zeichen nach bestimmten Regeln gebildet. Programmiersprachen sind jedoch formale Sprachen, d. h. ihre Regeln und Wörter und die Bedeutung der Sprachkonstrukte sind präzise festgelegt, sodass Programme automatisch geprüft und übersetzt werden können und die Wirkung ihrer Ausführung bestimmt ist.
Grundsätzlich sind die Konstrukte einer Programmiersprache so gewählt, dass man damit Abläufe, Algorithmen, unterschiedliche Arten von einfachen und strukturierten Daten, sowie Interaktionen mit Benutzern oder mit anderen Programmen beschreiben kann. Meist kommen Sprachkonstrukte hinzu, mit denen umfangreiche Software modular gegliedert und zusammengesetzt werden kann sowie Berechnungen und Daten abstrahiert und aus Bibliotheken wiederverwendet werden können.
Eine Programmiersprache wird stark davon geprägt, welche Paradigmen zur Programmentwicklung ( imperativ, objektorientiert, funktional oder logisch) die Sprache unterstützt. So ist z. B. C eine imperative, Java eine objektorientierte und imperative Sprache, SML eine funktionale und Prolog eine logische Sprache. Neben allgemein anwendbaren Programmiersprachen, wie z. B. C und Java, sind manche Sprachen auf Programme eines bestimmten Anwendungsgebietes spezialisiert. So sind Skriptsprachen, wie Perl und PHP, besonders auf die Bearbeitung von Dateien und Texten spezialisiert und gut zur Programmierung von Abläufen beim Besuch von Web-Seiten einsetzbar.
Anwendungsspezifische Sprachen sind ausschließlich auf ein bestimmtes Anwendungsgebiet spezialisiert, z. B. SQL für den Zugriff auf Datenbanken. Sprachen, deren Programme zwar Strukturen oder Eigenschaften beschreiben, aber nicht ausgeführt werden, bezeichnet man eher als Modellierungs- oder Spezifikationssprachen. Zur Programmierung werden meist textuelle Sprachen verwendet, deren Programme als Zeichenfolgen geschrieben werden.
Dagegen bestehen die Programme visueller Sprachen, wie die Modellierungssprache UML, aus graphischen Elementen, die in der Ebene angeordnet werden.
Notation, Struktur und Bedeutung von Programmen
Notation, Struktur und Bedeutung von Programmen
werden durch die Regeln der Sprache bestimmt. Das folgende Beispiel könnte aus einem
größeren Programm der Sprache C, C++ oder Java stammen:
{
int i=0, sum=0; while (i<10) sum += a [i++];
}
In dieser Folge einzelner Zeichen werden nach den lexikalischen Regeln der Sprache jeweils einige aufeinander folgende Zeichen zu einem Grundsymbol zusammengefasst, z. B. die Wortsymbole int und while, die Operatoren += und ++, der Bezeichner sum sowie das Literal
10. Andere Grundsymbole bestehen aus nur einem Zeichen, z. B. die Sonderzeichen { und = sowie der Bezeichner i. Die Zwischenräume in dem Text trennen Grundsymbole und gliedern den Text.
Eine Folge von Grundsymbolen wird nach syntaktischen Regeln der Sprache in Programmkonstrukte gegliedert: Das obige Beispiel ist ein Block, der eine Deklaration und eine Anweisung enthält, jeweils durch ; abgeschlossen. Die while-Anweisung enthält eine Bedingung i<10 und eine Zuweisung als Schleifenrumpf. Syntaktische Regeln legen die Struktur aller Sprachkonstrukte fest.
Die Regeln der statischen Semantik stellen Beziehungen zwischen Programmstrukturen her. Im Beispiel legen Bindungsregeln der Sprache z. B. fest, dass mit dem ersten Auftreten von i eine Variable dieses Namens eingeführt wird, auf die sich auch die beiden anderen Auftreten von i beziehen. Außerhalb des Blocks könnte der Name i eine andere Bedeutung haben. Variablen und Ausdrücke werden Typen zugeordnet, die festlegen, mit welchen Operationen sie verknüpft werden können: Die Variable i hat den Typ int; sie kann also ganzzahlige Werte aufnehmen. Die Operation i<10 vergleicht zwei Werte dieses Typs. Schließlich bestimmt die dynamische Semantik, welche Effekte die Ausführung der Programmkonstrukte verursacht. Der Zuweisungsoperator += erhöht z. B. den Wert der Variablen auf der linken Seite um den Wert des Ausdrucks auf der rechten Seite. Unter Anwendung der Sprachregeln kann man feststellen, dass obiges Beispiel die Elemente einer Reihung a[0] bis a[9] durchläuft und ihre Werte in der Variable sum aufaddiert. Ein Übersetzer für die Sprache würde aus dem Beispiel ein Maschinenprogramm erzeugen, das dies bewirkt.
Historie
Programmiersprachen werden seit den 1950er Jahren entwickelt. Zu den Sprachen, die vor 1960
definiert wurden und heute noch in Nachfolgeversionen vielfach benutzt werden, zählen Fortran, Cobol und Lisp. Für die Entwicklung von Software bedeutende und weit verbreitete Sprachen aus den 1970er und 80er Jahren sind z. B. C, Ada und C++. Die funktionale Sprache Haskell, die objektorientierten Sprachen Java und C# sowie die Skriptsprachen JavaScript und PHP sind Beispiele für bedeutende, weit verbreitete Sprachen, die nach 1990 entwickelt wurden.
Literatur
Sebesta, Robert W.: Concepts of Programming Languages. Eigth Edition. München: Pearson, 2008.
ACM: Special Interest Group on Programming Languages. http://www.acm.org/sigplan, (Abruf 29.8.2008)