![]() |
FPr lite - Interpreter für Function-Level-Programme [Update]
http://www.delphipraxis.net/members/...e-fpr-lite.jpg
Hallo, es ist schon 35 Jahre her, da veröffentlichte John Backus (bekannt von FORTRAN und BNF) anlässlich zum ACM Turing Award 1977 seinen Aufsatz "Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs" [1]. In diesem Aufsatz beschreibt er einen Kombinator-Stil, den er damals FP-Systeme nannte. Später nannte er diesen Programmierstil Function-Level Programming. Es werden kleine Programme mittels Kombinatoren zu größeren Programmen zusammengebaut. Ich habe eine Unit in Delphi erstellt, die ein FP-System verarbeitet, das als Datenstruktur nur die verkettete Liste unterstützt. Dabei liegt ein Function-Level-Programmtext als txt- oder fp-Datei vor und wird beim Start des Programms in verkettete Listen compiliert, die Funktionsbezeichnern zugeordnet werden, dann wird das Programm, das ja als Listen vorliegt von einem Interpreter verarbeitet. Als Vereinfachung habe ich die Infix-Notation gewählt: der Interpreter kennt nur Funktionen und Operatoren in Infixschreibweise, die zudem rechtsassoziativ sind. Eine kleine Zusammenstellung zu Function-Level-Programming ist hier zu finden: ![]() Ein Download eines Archivs mit dem Interpreter und Beispielprogrammen und zudem der Delphi-Unit (vmunit.pas im Unterordner Delphi XE2) ist im heise Software-Verzeichnis zu finden: ![]() Die Unit vmunit.pas ist leider wenig dokumentiert und einige Variablen sind auf einen implementierten Garbage-Collector ausgerichtet. Der Interpreter duldet nach außen keine Seiteneffekte, ist also referentiell Transparent. [Update:] Als Reaktion auf die Kritik in der vorherigen Projektvorstellung ist das Programm in eine Unit für die VM und für die GUI unterteilt worden. Die Guiunit ist für die Seiteneffekte und das Formular zuständig. Die Unit vmunit.pas für das FP-System ist unterteilt in - Schnittstelle - Konstanten - Automatische Speicherverwaltung - Umwandlung von Listendarstellung in Textdarstellung - Compiler (Pre- und Post-Compilierung) - Prädikate - FPr-Interpreter und Primitive (größter Abschnitt) - Initialisierung MfG Stefan [1] ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz