Was ist eine Programmiersprache?

Eine Programmiersprache ist eine Mensch-Computer-Schnittstelle - dabei handelt es sich nicht um eine natürliche Sprache, sondern um ein ">formales Regelwerk mit definierter Syntax, welche es erlaubt, einseitig mit dem Rechner zu kommunizieren und ihm Anweisungen zu geben.

Programmiersprachen sind ">formale Systeme, in denen Texte von einer Sorte verfasst werden, die man „">Programme” nennt. Ganz so, wie andere Textformen „Gedicht” oder „Erzählung” gennant werden. Eine Programmiersprache braucht zur Notation ihrer Programme ein Alphabet - die endliche Menge jener Zeichen, die verwendet werden dürfen, um Texte der Programmiersprache zu notieren. Zu ihrer Definition gehört weiter vor allem die Definition ihrer Syntax und einer Grammatik.[1]

Programmiersprachen sind auf der Grammatik- und Syntaxseite sehr fehleranfällig, da sie keine Toleranz erlauben. Es gibt keinen Interpretationsspielraum - damit ">Programme maschinenlesbar sind, müssen sie exakt formuliert sein. Dabei ist zu beachten, dass „eine Sprache nur dann exakt und eindeutig ist, wenn ihr Alphabet und ihre Transformationsregeln selbst wiederum in exakten und eindeutigen Begriffen erklärt werden können.”[2]

In Backus-Naur-Form läßt sich bspw. die Syntax von PASCAL[3] in exakter und endlicher Form beschreiben:[4]

<Programm>               ::= 'PROGRAM' <Bezeichner> 'BEGIN' <Satzfolge> 'END' .
<Bezeichner>             ::= <Buchstabe> <Restbezeichner>
<Restbezeichner>         ::= | <Buchstabe oder Ziffer> <Restbezeichner>
<Buchstabe oder Ziffer>  ::= <Buchstabe> | <Ziffer>
<Buchstabe>              ::= A | B | C | D | ... | Z | a | b | ... | z   *)
<Ziffer>                 ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<Satzfolge>              ::= ...
...

Syntaktischer Zucker

Das vorangegangene Beispiel der Syntax von PASCAL zeigt, wie reduziert so ein ">formales System sein kann. Eine Programmiersprache ist lediglich eine endliche Menge von Wörtern (die jeweiligen Programme) über einem Alphabet (Schlüsselwörter und Zeichen, die per Definition der Programmiersprache festgelegt sind). Alles weitere ist sogenannter syntaktischer Zucker:

Syntaktischer Zucker sind Syntaxerweiterungen in Programmiersprachen, welche der Vereinfachung von Schreibweisen dienen. Diese Erweiterungen sind alternative Schreibweisen, welche aber nicht die Ausdrucksstärke und Funktionalität der Programmiersprache erweitern.[5]

Was ist eine natürliche Sprache?

Die von Menschen gesprochene Sprache wird als natürliche Sprache bezeichnet. Näturliche Sprachen haben ihren Ursprung in langfristigen, kulturellen Entwicklungen, die von Generation zu Generation weitergegeben und verfeinert werden - sie sind sozusagen Vereinbarungen im Sinne der Kommunikation.

Natürliche Sprachen sind sehr umfangreich und flexibel: So können beispielsweise unterschiedliche Wörter die gleiche Bedeutung haben - die Bedeutung ergibt sich in diesen Fällen aus den kulturellen Konventionen. Da sie der Verständigung dienen und sich dabei des kulturellen Zeichenfundus (unseren Worten) bedienen, können wir Menschen die Inhalte meistens auch verstehen, wenn die Wortkonstrukte oder Sätze falsch formuliert sind („Hier werden sie geholfen.”).

Whenever the computer fails to cooperate, the novice usually accuses the computer of stupidity. But the computer cannot think of beyond anything you tell it. In contrast, a fellow human can cope with situations of incomplete information and usually recover. [...] The computer does not yet have this level of intuitive comprehension; therefore, we must address it in a specific manner.[6]

Wir Menschen interpretieren und bewegen uns dabei auf einer „Superzeichen-Ebene”. Der Kontext in dem die Person sich bewegt schafft die Bedeutung:

Im normalen Leben erteilen wir uns gegenseitig Anweisungen, d. h. wir beschreiben einander Verfahren, die zwar vielleicht insofern technisch mehrdeutig sind, als sie potentiell mehrere Interpretationen zulassen, die für praktische Zwecke jedoch durchaus effektive Verfahren darstellen. Im grunde beruhen sie auf einem weitgehend gemeinsamen Wortschatz, dessen Elemente, sofern sie in einem stark konventionalisierten Kontext auftreten im Prinzip eindeutig interpretiert werden.[7]

Eine Maschine wie z.B. der Computer hat diesen Kontext nicht und kann daher nicht in unserem Sinne interpretieren.

Was ist der Unterschied zwischen einer natürlichen Sprache und einer Programmiersprache?

Natürliche Sprachen wie z.B. Deutsch erleben eine sukzessive, kulturelle Entwicklung und werden daraus hervorgebracht. Programmiersprachen wie beispielsweise Java werden erschaffen und sprunghaft bzw. versionsweise verändert. Sie basieren auf einem fest vorgegebenen Wortschatz (Syntax), welcher eindeutig und wesentlich kleiner ist als der natürlicher Sprachen. Natürlichen Sprachen lassen viel mehr Freiraum für Interpretationen, so gibt es z.B Worte mit mehrfacher Bedeutung.

Programmiersprachen (Assembler, Smalltalk, Ruby, Java, , ...) sind an natürliche Sprachen angepasst und je nach Abstraktionsgrad mehr oder weniger nah an unserer Sprache. Sie sind dennoch nicht als gesprochene Sprachen gedacht, sondern dienen einem rein funktionalen Zweck.

Was ist ein Compiler? Was ist ein Interpreter?

Ein Compiler übersetzt Programmcode in ausführbare Programme, sogenannten Maschinencode. Diese Übersetzung ist maschinen- bzw. prozessorspezifisch, so dass bestimmte Rechner das Programm ausführen können.

Interpreter hingegen verarbeiten den Programmcode zur Laufzeit, so dass keine vorangegangene Übersetzung notwendig ist.
Es gibt auch Mischformen zwischen Compiler und Interpreter - in Java wird beispielsweise der Programmcode in Bytecode vorkompiliert und auf der ausführenden Maschine durch die Java Virtual Machine interpretiert.

Worin unterscheiden sich Maschinen- von Assemblersprachen und höheren Programmiersprachen?

Der Unterschied liegt im Abstraktionsgrad: Maschinensprachen besitzen die höchste Abstraktion, wohingegen die hohen Programmiersprachen relativ nah an den natürlichen Sprachen sind und teilweise Worte bzw. Elemente aus ihnen übernehmen.

Quellen

  1. #nake-algorithmus">Frieder Nake: Funktion Algorithmus Programm und so
  2. #weiz78">[Weiz78, 99]
  3. Syntax der Sprache PASCAL: http://www99.mh-hannover.de/einrichtungen/tumorzentrum/mitarbeiter/ wegener/PAS_Syntax.pdf. Aufgerufen am 17.02.2007.
  4. Wikipedia: Backus-Naur-Form. http://de.wikipedia.org/wiki/Backus-Naur-Form. Aufgerufen am 17.02.2007.
  5. Wikipedia: Syntaktischer Zucker. http://de.wikipedia.org/wiki/Syntaktischer_Zucker. Aufgerufen am 20.02.2007.
  6. #maed99">[Maed99]
  7. #weiz78">[Weiz78, 104]