3. Syntax, Semantik und Pragmatik
Ziele dieser Einheit:
- Grundsätze der systematischen Manipulation und Verwendung von Zeichen, d.h. Zeichenlehre
(Semiotik) kennen lernen.
- Die Begriffe Algorithmus und Zeichenlehre für
Zwecke der systematischen Programmierung in
Verbindung bringen.
Semantische Fehler
Syntaktische Fehler Stigmatische
Fehler Pragmatische
Fehler
Semantik
Pragmatik
Syntaktik (Syntax)
Stigmatik Bedeutung
Bezeichnetes
Benutzer/
Erzeuger
Metazeichen
(Konstrukt)
Zeichen
3.1 Semiotik (Zeichenlehre)
Bedeutung
SEMANTIK(Semantische Regeln)Für die Darstellung der Syntax benutzen wir
SYNTAX-Diagramme.
SYNTAX
Zusammensetzung der Zeichen
(Syntaktische Regeln)
Beispiel:
Das Sprachkonstrukt „mürck“ aus der
tückischenProgram- miersprache „ürck/1“ (weit verbreitet in den Hinter-Pfälzischen Kirch-am- Boolean-Höhen) sei durch die folgenden Syntax-Diagramme formal definiert.
3.2 Einführung in Syntaxdiagramme
tück g
l m
k sch
mürck ü
ü tück
ü, ügü, ügügü, ügügügü,...
ümü, ..., ümügü, ..., ükügü, ...
ülü, ülümü, ...
üschü, üschüschü, ...,üschügü, ...
Generierte Wörter:
Backus-Naur-Form (BNF)
• Eine weitere Metasprache zur formalen Syntaxbeschreibung, genannt nach J.W. Backus (USA) und P. Naur (DK).
• Erstmals benutzt zur Beschreibung von ALGOL 60 (1960).
Symbol Bedeutung
::= Definition Metavariable satz Metavariable
(Nicht-Terminal)
“ a “ Terminal
Symbol Bedeutung
X ⎮ Y Optional ( X oder Y ) XY Konkatenation ( Y
folgt X )
mürck in BNF: mürck ::= “ü“ ⎮ mürck tück “ü“
tück ::= “g“ ⎮ “l“ ⎮ “m“ ⎮ “k“ ⎮ “sch“
„Extended“ BNF – EBNF
Symbol Bedeutung Symbol Bedeutung
::= Definition Metavariable (X ⎮ Y) Optional (X oder Y)
satz Metavariable (Nicht- Terminal)
XY Konkatenation (Y folgt X)
“ a “ Terminal [X] 0- oder 1-malige
Ersetzung
. Ende der Ersetzungsregel {X} 0- oder mehr- malige Ersetzung
mürck in EBNF:
mürck ::= “ü“ {tück “ü“}.
tück ::= (“g“ ⎮ “l“ ⎮ “m“ ⎮ “k“ ⎮ “sch“).
Anmerkung: für BNF/EBNF existieren in der Literatur versch. Notationen.
Yesterday´s pragmatics
is
today´s semantics
is
tomorrow´s syntax
Pragmatics
Konzepte von Programmiersprachen („... common sense ...“)Semantics
Bedeutung von Programmkonstrukten („... syntactical sugar makes it easy ...“)Syntax
Format der Programmkonstrukte („... the easy part of the semantics ...“)0 1. .. 9 Ziffer
A|a BIb.
..
ZIz -
Buchstabe/Sonderzeichen
(Unterstrich) Buchstabe
Buchstabe Ziffer Bezeichner
3.3 Bezeichner („identifier“)
BNF: Bezeichner ::= Buchstabe⎮Bezeichner (Buchstabe⎮Ziffer) Buchstabe ::= (“A“⎮“a“)⎮(“B“⎮“b“)⎮…⎮“_“)
Ziffer ::= “0“⎮…⎮“9“
EBNF: Bezeichner ::= Buchstabe {Buchstabe⎮Ziffer}.
Buchstabe ::= ((“A“⎮“a“)⎮(“B“⎮“b“)⎮ … ⎮“_“).
Ziffer ::= (“0“⎮…⎮“9“).
Bemerkung: In C wird zwischen Klein- und Großbuchstaben unterschieden.
Folgende Konventionen sind geläufig:
- Variablennamen, Funktionsnamen: klein - Konstantennamen: groß
otto23 JULIA 2x
hans-jürgen hANS jÜRGEN Hans_Jürgen Hans$
Beispiele für Bezeichner – welche sind nicht korrekt?
PI
3.4 Sprachen als Kommunikationsmittel zwischen verschiedenen Dialogpartnern
Mensch Mensch
Problemorientiert (Umgangssprache)
Maschine Maschine
Maschinenorientiert Problemorientiert
Maschinenorientiertoder
Mensch Maschine
#include <stdio.h>
int main() {
printf("Hallo Welt\n");
return 0;
}
Dies erfordert: Eindeutigkeit der Sprachelemente.
Beispiele für Mehrdeutigkeit (Umgangssprache):
Wachtraum / Time flies like an arrow
58 20 40 00 Lade /* Lade 5A 20 40 04 Addiere /* Addiere 50 20 40 08 Speichere /* Speichere
- Maschinenorientierte Sprache:
(Objekt-Code)
- Problemorientierte Sprache:
(Quell-Code)
3.5 Programmiersprachen
Ziel der Kommunikation: Übermittlung von Algorithmen (hier relevant).
Vermeidung der Mehrdeutigkeit:
Verzweigung
Ende
Ausgabe printf("");
Beginn {
Eingabe scanf ("%s", Zutaten);
Elemente der Programmier- sprachen (z.B. C)
3.6 Grundkonstrukte von C
GRUNDOPERATIONEN DER ALGORITHMEN
Daten-(Zutaten-/Zwischenergebnis) Beschreibung Iteration
Sequenz a = b + 1 ;
c = (2 * a) / 3 ; ...
...
if (kochzeit > 30) esse();
else warte();
while (kochzeit < 30) warte();
}
typedef ...
struct ...
Sprachkonstrukte in verschiedenen höheren Sprachen
Sprache Konstrukt
FORTRAN BASIC COBOL Pascal C
Eingabe
READ INPUTREAD/
DATA
READ ACCEPT
READ READLN
getchar() gets() scanf() sscanf() fscanf()
Verarbei- tung
=
IF/ELSE DO
LET IF/ELSE
COMPUTE IF/ELSE PERFORM
:=
IF/ELSE FOR WHILE REPEAT
= if for while do
Ausgabe
WRITEPRINT PRINT/
USING
WRITE DISPLAY
WRITE WRITELN
putchar() puts() printf() sprintf() fprintf()
3.6 Kurzgeschichte von C
- C hat ihre Ursprünge in den „typenlosen“ Sprachen
BCPL („Basic Combined Programming Language“): 1967-69 von M.
Richards (Cambridge Univ.) als hardwareorientierte Sprache konzipiert.
B: 1970 als minimale Teilmenge von BCPL (D. M. Ritchie) von K.
Thompson, Bell Labs für den Einsatz im ersten in Unix
TM-System geschaffen.
- 1972-73: inoffizielles C (B.W. Kernighan/D.M. Ritchie, Bell Labs).
- 1982- 89: ANSI-Standardisierungsprozess führte zu „ANSI-C“ (Norm-Nr:
ANSI X3.159 und ISO/IEC 9899).
- ANSI C ist hochgradig portabel.
ALGOL ALGOL68
Eiffel
Ada CHILL Pascal
196019701980
BCPL C B
LISP
KEE-Units FRL
LOOPS
CLOS Flavours
KRL
Legende:
: Weiterentwicklung (Add-On) : Derivat/starker Einfluß
1990
Smalltalk80
~~
Smalltalk72 Simula67
: Objektorientiert Objective C
C++
2000
Objekt-CHILL
Java
PROLOG
PROLOOP
2.8 Historische Entwicklung der Programmiersprachen
3.7 Wesentliche Eigenschaften von C
- Als „die Sprache“ von/für UnixTM bekannt; auch für mehrere andere Plattformen erhältlich. Der knappe Sprachumfang unterstützt ihre Portabilität ganz besonders.
- Allgemein einsetzbar, obwohl ursprünglich für Systemprogrammierung konzipiert.
- Wesentliche Elemente moderner imperativer Programmiersprachen vorhanden.
- C hat lediglich 32 Schlüsselwörter, andere, vergleichbare Sprachen dagegen einige hundert.
- Diese besonders spartanische Syntax ist gewöhnungsbedürftig. Die Verwandtschaft mit ALGOL, Pascal schwer feststellbar.
- Durch Erweiterung reichhaltiger Funktionsbibliotheken entstanden.
- Aber: Geeignete Funktionsbibliotheken und Laufzeitumgebungen schaffen Abhilfe.
- Der eigentliche Sprachumfang von C
enthält keine E/A-Anweisungen,
keine Unterstützung der Speicherverwaltung/Zeichenkettenverarbeitung,
keine Multiprogrammierung etc.
- Aber: Geeignete Funktionsbibliotheken und Laufzeitumgebungen schaffen Abhilfe.