Qualifikationsphase 2
Für die Programmiersprache Delphi (Lazarus) gibt es Regeln, nach denen Programme formuliert werden müssen. Für drei Beispiele sollen die Syntaxdiagramme wiedergegeben werden. Aus diesen Diagrammen werden dann die erkennenden Automaten entwickelt. Im Anschluss daran finden sich dann die entsprechenden Delphi (Lazarus)-Programme.
const Kreiskonstante = 3.14; Durchmesser = 34;
Konstantenvereinbarung

Bezeichner
Bezeichner werden für Konstanten, Variablen, Felder, Typen, Eigenschaften, Prozeduren, Funktionen, Programme, Units, Bibliotheken und Packages verwendet. Obwohl ein Bezeichner beliebig lang sein kann, sind nur die ersten 255 Zeichen signifikant. Ein Bezeichner muss mit einem alphabetischen Zeichen oder einem Unterstrich (_) beginnen und darf keine Leerzeichen enthalten. Auf das erste Zeichen können alphanumerische Zeichen, Ziffern und Unterstriche folgen. Reservierte Wörter dürfen nicht als Bezeichner verwendet werden. Im folgenden Beispiel sind nur die Buchstaben a und b zulässig.

Wert

String
Ein String in Anführungszeichen setzt sich aus einer Folge von maximal 255 Zeichen des erweiterten ASCII-Zeichensatzes zusammen, muss in einer Zeile stehen und in halbe Anführungszeichen eingeschlossen sein. Ein String in Anführungszeichen, der zwischen den halben Anführungszeichen kein Zeichen enthält, ist ein Null-String. Im folgenden Beispiel ist nur 'x' zugelassen.

Zahl
Integer-Konstanten lassen sich in dezimaler Notation als Folge von Ziffern ohne Kommas oder Leerzeichen darstellen. Im Beispiel ist nur die Ziffer 1 erlaubt.

Automat

Quellcode Lazarus:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics,
Dialogs,
StdCtrls;
type
{ TForm1 }
tZustand = (s0,s1,s2,s3,s4,s5,s6,s7,s8,sf,se);
TForm1 = class(TForm)
BtReset: TButton;
BtEinzel: TButton;
BtDauer: TButton;
EdEingabe: TEdit;
EdAusgabe: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure BtResetClick(Sender: TObject);
procedure BtEinzelClick(Sender: TObject);
procedure BtDauerClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
zustand: tZustand;
pos: integer;
function u(s: tZustand; e: char): tZustand;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
procedure TForm1.BtResetClick(Sender: TObject);
begin
pos := 0 ;
zustand := s0;
EdAusgabe.Text := '';
end;
procedure TForm1.BtEinzelClick(Sender: TObject);
var eingabe,ausgabe: string;
e: char;
begin
eingabe := EdEingabe.text;
ausgabe := EdAusgabe.text;
if (pos < length(eingabe)) then
begin
pos:=pos+1;
e:=eingabe[pos];
if e in ['c','a','b','=','1','''','x',';'] then
begin
zustand := u(zustand,e);
if zustand = se then ausgabe := 'in Ordnung' else
ausgabe:='Fehler';;
EdAusgabe.Text := ausgabe;
end
end
end;
procedure TForm1.BtDauerClick(Sender: TObject);
var i:integer;
begin
for i:=1 to length(EdEingabe.text) do BtEinzelClick(sender);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
pos:=0;
zustand:=S0;
end;
function TForm1.u(s: tZustand; e: char): tZustand;
begin
case s of
S0: case e of
'c' : result := S1;
'a' : result := Sf;
'b' : result := Sf;
'=' : result := Sf;
'1' : result := Sf;
'''' : result := Sf;
'x' : result := Sf;
';' : result := Sf;
end;
S1: case e of
'c' : result := Sf;
'a' : result := S2;
'b' : result := S2;
'=' : result := Sf;
'1' : result := Sf;
'''' : result := Sf;
'x' : result := Sf;
';' : result := Sf;
end;
S2: case e of
'c' : result := Sf;
'a' : result := S2;
'b' : result := S2;
'=' : result := S3;
'1' : result := Sf;
'''' : result := Sf;
'x' : result := Sf;
';' : result := Sf;
end;
S3: case e of
'c' : result := Sf;
'a' : result := Sf;
'b' : result := Sf;
'=' : result := Sf;
'1' : result := S4;
'''' : result := S5;
'x' : result := Sf;
';' : result := Sf;
end;
S4: case e of
'c' : result := Sf;
'a' : result := Sf;
'b' : result := Sf;
'=' : result := Sf;
'1' : result := S4;
'''' : result := Sf;
'x' : result := Sf;
';' : result := Se;
end;
S5: case e of
'c' : result := Sf;
'a' : result := Sf;
'b' : result := Sf;
'=' : result := Sf;
'1' : result := Sf;
'''' : result := S7;
'x' : result := S6;
';' : result := Sf;
end;
S6: case e of
'c' : result := Sf;
'a' : result := Sf;
'b' : result := Sf;
'=' : result := Sf;
'1' : result := Sf;
'''' : result := S7;
'x' : result := S6;
';' : result := Sf;
end;
S7: case e of
'c' : result := Sf;
'a' : result := Sf;
'b' : result := Sf;
'=' : result := Sf;
'1' : result := Sf;
'''' : result := Sf;
'x' : result := Sf;
';' : result := Se;
end;
SE: case e of
'c' : result := Sf;
'a' : result := S2;
'b' : result := S2;
'=' : result := Sf;
'1' : result := Sf;
'''' : result := Sf;
'x' : result := Sf;
';' : result := Sf;
end
end;
end;
initialization
{$I unit1.lrs}
end.
var eingabe, ausgabe: String; a,b,c: Integer; Treffer: Boolean; pos:Integer = 0;
Variablenvereinbarung

Bezeichner (Im Beispiel ist nur der Buchstabe a zulässig)

Typ (i:Integer, s:String, b:Boolean)

Wert (f:false, t:true)

String (Im Beispiel ist nur x als Buchstabe zugelassen)

Zahl (Im Beispiel ist nur die Ziffer 1 erlaubt)

procedure Volumen(var inhalt:double; l,b,h:double);
Methodenkopf

Parameterliste

Bezeichner

Typ
