1 |
Künstliche Intelligenz, Logik und Mathematikunterricht /Pilz, Eva. January 1991 (has links)
Zugl.: Oldenburg, Universiẗat, Diss., 1990.
|
2 |
Defining and Implementing Domain-Specific Languages with Prolog / Definition und Implementierung domänenspezifischer Sprachen mit PrologNogatz, Falco January 2023 (has links) (PDF)
The landscape of today’s programming languages is manifold. With the diversity of applications, the difficulty of adequately addressing and specifying the used programs increases. This often leads to newly designed and implemented domain-specific languages. They enable domain experts to express knowledge in their preferred format, resulting in more readable and concise programs. Due to its flexible and declarative syntax without reserved keywords, the logic programming language Prolog is particularly suitable for defining and embedding domain-specific languages.
This thesis addresses the questions and challenges that arise when integrating domain-specific languages into Prolog. We compare the two approaches to define them either externally or internally, and provide assisting tools for each. The grammar of a formal language is usually defined in the extended Backus–Naur form. In this work, we handle this formalism as a domain-specific language in Prolog, and define term expansions that allow to translate it into equivalent definite clause grammars. We present the package library(dcg4pt) for SWI-Prolog, which enriches them by an additional argument to automatically process the term’s corresponding parse tree. To simplify the work with definite clause grammars, we visualise their application by a web-based tracer.
The external integration of domain-specific languages requires the programmer to keep the grammar, parser, and interpreter in sync. In many cases, domain-specific languages can instead be directly embedded into Prolog by providing appropriate operator definitions. In addition, we propose syntactic extensions for Prolog to expand its expressiveness, for instance to state logic formulas with their connectives verbatim. This allows to use all tools that were originally written for Prolog, for instance code linters and editors with syntax highlighting. We present the package library(plammar), a standard-compliant parser for Prolog source code, written in Prolog. It is able to automatically infer from example sentences the required operator definitions with their classes and precedences as well as the required Prolog language extensions. As a result, we can automatically answer the question: Is it possible to model these example sentences as valid Prolog clauses, and how?
We discuss and apply the two approaches to internal and external integrations for several domain-specific languages, namely the extended Backus–Naur form, GraphQL, XPath, and a controlled natural language to represent expert rules in if-then form. The created toolchain with library(dcg4pt) and library(plammar) yields new application opportunities for static Prolog source code analysis, which we also present. / Die Landschaft der heutigen Programmiersprachen ist vielfältig. Mit ihren unterschiedlichen Anwendungsbereichen steigt zugleich die Schwierigkeit, die eingesetzten Programme adäquat anzusprechen und zu spezifizieren. Immer häufiger werden hierfür domänenspezifische Sprachen entworfen und implementiert. Sie ermöglichen Domänenexperten, Wissen in ihrem bevorzugten Format auszudrücken, was zu lesbareren Programmen führt. Durch ihre flexible und deklarative Syntax ohne vorbelegte Schlüsselwörter ist die logische Programmsprache Prolog besonders geeignet, um domänenspezifische Sprachen zu definieren und einzubetten.
Diese Arbeit befasst sich mit den Fragen und Herausforderungen, die sich bei der Integration von domänenspezifischen Sprachen in Prolog ergeben. Wir vergleichen die zwei Ansätze, sie entweder extern oder intern zu definieren, und stellen jeweils Hilfsmittel zur Verfügung. Die Grammatik einer formalen Sprache wird häufig in der erweiterten Backus–Naur–Form definiert. Diesen Formalismus behandeln wir in dieser Arbeit als eine domänenspezifische Sprache in Prolog und definieren Termexpansionen, die es erlauben, ihn in äquivalente Definite Clause Grammars für Prolog zu übersetzen. Durch das Modul library(dcg4pt) werden sie um ein zusätzliches Argument erweitert, das den Syntaxbaum eines Terms automatisch erzeugt. Um die Arbeit mit Definite Clause Grammars zu erleichtern, visualisieren wir ihre Anwendung in einem webbasierten Tracer.
Meist können domänenspezifische Sprachen jedoch auch mittels passender Operatordefinitionen direkt in Prolog eingebettet werden. Dies ermöglicht die Verwendung aller Werkzeuge, die ursprünglich für Prolog geschrieben wurden, z.B. zum Code-Linting und Syntax-Highlighting. In dieser Arbeit stellen wir den standardkonformen Prolog-Parser library(plammar) vor. Er ist in Prolog geschrieben und in der Lage, aus Beispielsätzen automatisch die erforderlichen Operatoren mit ihren Klassen und Präzedenzen abzuleiten. Um die Ausdruckskraft von Prolog noch zu erweitern, schlagen wir Ergänzungen zum ISO Standard vor. Sie erlauben es, weitere Sprachen direkt einzubinden, und werden ebenfalls von library(plammar) identifiziert. So ist es bspw. möglich, logische Formeln direkt mit den bekannten Symbolen für Konjunktion, Disjunktion, usw. als Prolog-Programme anzugeben.
Beide Ansätze der internen und externen Integration werden für mehrere domänen-spezifische Sprachen diskutiert und beispielhaft für GraphQL, XPath, die erweiterte Backus–Naur–Form sowie Expertenregeln in Wenn–Dann–Form umgesetzt. Die vorgestellten Werkzeuge um library(dcg4pt) und library(plammar) ergeben zudem neue Anwendungsmöglichkeiten auch für die statische Quellcodeanalyse von Prolog-Programmen.
|
3 |
Integration of Prolog and Java with the Connector Architecture CAPJa / Integration von Prolog und Java mit Hilfe der Connector Architecture CAPJaOstermayer, Ludwig January 2017 (has links) (PDF)
Modern software is often realized as a modular combination of subsystems for, e. g.,
knowledge management, visualization, verification, or the interaction with users. As
a result, software libraries from possibly different programming languages have to
work together. Even more complex the case is if different programming paradigms
have to be combined. This type of diversification of programming languages and
paradigms in just one software application can only be mastered by mechanisms
for a seamless integration of the involved programming languages. However, the
integration of the common logic programming language Prolog and the popular
object-oriented programming language Java is complicated by various interoperability
problems which stem on the one hand from the paradigmatic gap between the
programming languages, and on the other hand, from the diversity of the available
Prolog systems.
The subject of the thesis is the investigation of novel mechanisms for the integration
of logic programming in Prolog and object–oriented programming in Java. We are
particularly interested in an object–oriented, uniform approach which is not specific
to just one Prolog system. Therefore, we have first identified several important
criteria for the seamless integration of Prolog and Java from the object–oriented
perspective. The main contribution of the thesis is a novel integration framework
called the Connector Architecture for Prolog and Java (CAPJa). The framework is
completely implemented in Java and imposes no modifications to the Java Virtual
Machine or Prolog. CAPJa provides a semi–automated mechanism for the integration
of Prolog predicates into Java. For compact, readable, and object–oriented
queries to Prolog, CAPJa exploits lambda expressions with conditional and relational
operators in Java. The communication between Java and Prolog is based
on a fully automated mapping of Java objects to Prolog terms, and vice versa. In
Java, an extensible system of gateways provides connectivity with various Prolog
system and, moreover, makes any connected Prolog system easily interchangeable,
without major adaption in Java. / Moderne Software ist oft modular zusammengesetzt aus Subsystemen zur Wissensverwaltung,
Visualisierung, Verfikation oder Benutzerinteraktion. Dabei müssen
Programmbibliotheken aus möglicherweise verschiedenen Programmiersprachen miteinander
zusammenarbeiten. Noch komplizierter ist der Fall, wenn auch noch verschiedene
Programmierparadigmen miteinander kombiniert werden. Diese Art der
Diversifikation an Programmiersprachen und –paradigmen in nur einer Software
kann nur von nahtlosen Integrationsmechansimen für die beteiligten Programmiersprachen
gemeistert werden. Gerade die Einbindung der gängigen Logikprogrammiersprache
Prolog und der populären objektorientierten Programmiersprache
Java wird durch zahlreiche Kompatibilitätsprobleme erschwert, welche auf der einen
Seite von paradigmatischen Unterschieden der beiden Programmiersprachen herrühren
und auf der anderen Seite von der Vielfalt der erhältlichen Prologimplementierungen.
Gegenstand dieser Arbeit ist die Untersuchung von neuartigen Mechanismen für
die Zusammenführung von Logikprogrammierung in Prolog und objektorienter
Programmierung in Java. Besonders interessiert uns dabei ein objektorientierter,
einheitlicher Ansatz, der nicht auf eine konkrete Prologimplementierung festgelegt
ist. Aus diesem Grund haben wir zunächst wichtige Kriterien für die nahtlose Integration
von Prolog und Java aus der objetorientierten Sicht identifziert. Der
Hauptbeitrag dieser Arbeit ist ein neuartiges Integrationssystems, welches Connector
Architecture for Prolog and Java (CAPJa) heißt. Das System ist komplett in
Java implementiert und benötigt keine Anpassungen der Java Virtual Machine
oder Prolog. CAPJa stellt einen halbautomatischen Mechanismus zur Vernetzung
von Prolog Prädikaten mit Java zur Verfügung. Für kompakte, lesbare und objektorientierte
Anfragen an Prolog nutzt CAPJa Lambdaausdrücke mit logischen
und relationalen Operatoren in Java. Die Kommunikation zwischen Java und Prolog
basiert auf einer automatisierten Abbildung von Java Objekten auf Prolog
Terme, und umgekehrt. In Java bietet ein erweiterbares System von Schnittstellen
Konnektivität zu einer Vielzahl an Prologimplmentierung und macht darüber hinaus jede verbundene Prologimplementierung einfach austauschbar, und zwar ohne größere Anpassung in Java.
|
Page generated in 0.0911 seconds