41 research outputs found
The ModelCC Model-Driven Parser Generator
Syntax-directed translation tools require the specification of a language by
means of a formal grammar. This grammar must conform to the specific
requirements of the parser generator to be used. This grammar is then annotated
with semantic actions for the resulting system to perform its desired function.
In this paper, we introduce ModelCC, a model-based parser generator that
decouples language specification from language processing, avoiding some of the
problems caused by grammar-driven parser generators. ModelCC receives a
conceptual model as input, along with constraints that annotate it. It is then
able to create a parser for the desired textual syntax and the generated parser
fully automates the instantiation of the language conceptual model. ModelCC
also includes a reference resolution mechanism so that ModelCC is able to
instantiate abstract syntax graphs, rather than mere abstract syntax trees.Comment: In Proceedings PROLE 2014, arXiv:1501.0169
Epsilon Precedence Grammars and Languages
The classes of simple and weak precedence grammars are generalized to include Δ-rules (productions with the empty right parts). The descriptive power of epsilon simple precedence (ESP) grammars increases directly with the number of Δ-rules permitted; the class of ESP grammars with no Δ-rules, ESP0, is identical to the class of simple precedence grammars; ESP grammars with at most one Δ-rule, ESP1, define a class of languages which properly includes the class of ESP0 languages, but is itself properly included in the class of deterministic, context-free languages. In general, ESP grammars having at most i Δ-rules, ESPi, define a class of languages which is properly included in that defined by ESPi+1 grammars. This hierarchy of languages exhausts the deterministic context-free languages. The hierarchy of ESP languages is established using an iteration theorem which may be used to show that a given language is not ESPi for a given i.
An algorithm to convert arbitrary LR(1) grammars to equivalent epsilon weak precedence (EWP) grammars is developed.
The class of Viable Prefix EWP grammars is defined and it is shown that the EWP parser for every Viable Prefix EWP grammar detects syntactic errors at the earliest possible time. Also, it is established that every deterministic context-free language is defined by some Viable Prefix EWP grammar.
Finally, it is shown that the class of EWP grammars, while properly containing the class of Viable Prefix EWP grammars, is itself properly included in the well-known classes of context-free grammars with the Δ-rules which define exactly the deterministic context-free languages
Extensible Languages for Flexible and Principled Domain Abstraction
Die meisten Programmiersprachen werden als Universalsprachen entworfen. UnabhĂ€ngig von der zu entwickelnden Anwendung, stellen sie die gleichen Sprachfeatures und Sprachkonstrukte zur VerfĂŒgung. Solch universelle Sprachfeatures ignorieren jedoch die spezifischen Anforderungen, die viele Softwareprojekte mit sich bringen.
Als Gegenkraft zu Universalsprachen fördern domÀnenspezifische Programmiersprachen, modellgetriebene Softwareentwicklung und sprachorientierte Programmierung die Verwendung von DomÀnenabstraktion, welche den Einsatz von domÀnenspezifischen Sprachfeatures und Sprachkonstrukten ermöglicht. Insbesondere erlaubt DomÀnenabstraktion Programmieren auf dem selben Abstraktionsniveau zu programmieren wie zu denken und vermeidet dadurch die Notwendigkeit DomÀnenkonzepte mit universalsprachlichen Features zu kodieren.
Leider ermöglichen aktuelle AnsĂ€tze zur DomĂ€nenabstraktion nicht die Entfaltung ihres ganzen Potentials. Einerseits mangelt es den AnsĂ€tzen fĂŒr interne domĂ€nenspezifische Sprachen an FlexibilitĂ€t bezĂŒglich der Syntax, statischer Analysen, und WerkzeugunterstĂŒtzung, was das tatsĂ€chlich erreichte Abstraktionsniveau beschrĂ€nkt. Andererseits mangelt es den AnsĂ€tzen fĂŒr externe domĂ€nenspezifische Sprachen an wichtigen Prinzipien, wie beispielsweise modularem SchlieĂen oder Komposition von DomĂ€nenabstraktionen, was die Anwendbarkeit dieser AnsĂ€tze in der Entwicklung gröĂerer Softwaresysteme einschrĂ€nkt. Wir verfolgen in der vorliegenden Doktorarbeit einen neuartigen Ansatz, welcher die Vorteile von internen und externen domĂ€nenspezifischen Sprachen vereint um flexible und prinzipientreue DomĂ€nenabstraktion zu unterstĂŒtzen.
Wir schlagen bibliotheksbasierte erweiterbare Programmiersprachen als Grundlage fĂŒr DomĂ€nenabstraktion vor. In einer erweiterbaren Sprache kann DomĂ€nenabstraktion durch die Erweiterung der Sprache mit domĂ€nenspezifischer Syntax, statischer Analyse, und WerkzeugunterstĂŒtzung erreicht werden . Dies ermöglicht DomĂ€nenabstraktionen die selbe FlexibilitĂ€t wie externe domĂ€nenspezifische Sprachen. Um die Einhaltung ĂŒblicher Prinzipien zu gewĂ€hrleisten, organisieren wir Spracherweiterungen als Bibliotheken und verwenden einfache Import-Anweisungen zur Aktivierung von Erweiterungen. Dies erlaubt modulares SchlieĂen (durch die Inspektion der Import-Anweisungen), unterstĂŒtzt die Komposition von DomĂ€nenabstraktionen (durch das Importieren mehrerer Erweiterungen), und ermöglicht die uniforme Selbstanwendbarkeit von Spracherweiterungen in der Entwicklung zukĂŒnftiger Erweiterungen (durch das Importieren von Erweiterungen in einer Erweiterungsdefinition). Die Organisation von Erweiterungen in Form von Bibliotheken ermöglicht DomĂ€nenabstraktionen die selbe Prinzipientreue wie interne domĂ€nenspezifische Sprachen.
Wir haben die bibliotheksbasierte erweiterbare Programmiersprache SugarJ entworfen und implementiert. SugarJ Bibliotheken können Erweiterungen der Syntax, der statischen Analyse, und der WerkzeugunterstĂŒtzung von SugarJ deklarieren. Eine syntaktische Erweiterung besteht dabei aus einer erweiterten Syntax und einer Transformation der erweiterten Syntax in die Basissyntax von SugarJ. Eine Erweiterung der Analyse testet Teile des abstrakten Syntaxbaums der aktuellen Datei und produziert eine Liste von Fehlern. Eine Erweiterung der WerkzeugunterstĂŒtzung deklariert Dienste wie SyntaxfĂ€rbung oder CodevervollstĂ€ndigung fĂŒr bestimmte Sprachkonstrukte. SugarJ Erweiterungen sind vollkommen selbstanwendbar: Eine erweiterte Syntax kann in eine Erweiterungsdefinition transformiert werden, eine erweiterte Analyse kann Erweiterungsdefinitionen testen, und eine erweiterte WerkzeugunterstĂŒtzung kann Entwicklern beim Definieren von Erweiterungen assistieren. Um eine Quelldatei mit Erweiterungen zu verarbeiten, inspizieren der SugarJ Compiler und die SugarJ IDE die importierten Bibliotheken um die aktiven Erweiterungen zu bestimmen. Der Compiler und die IDE adaptieren den Parser, den Codegenerator, die Analyseroutine und die WerkzeugunterstĂŒtzung der Quelldatei entsprechend der aktiven Erweiterungen.
Wir beschreiben in der vorliegenden Doktorarbeit nicht nur das Design und die Implementierung von SugarJ, sondern berichten darĂŒber hinaus ĂŒber Erweiterungen unseres ursprĂŒnglich Designs. Insbesondere haben wir eine Generalisierung des SugarJ Compilers entworfen und implementiert, die neben Java alternative Basissprachen unterstĂŒtzt. Wir haben diese Generalisierung verwendet um die bibliotheksbasierten erweiterbaren Programmiersprachen SugarHaskell, SugarProlog, und SugarFomega zu entwickeln. Weiterhin haben wir SugarJ ergĂ€nzt um polymorphe DomĂ€nenabstraktion und KommunikationsintegritĂ€t zu unterstĂŒtzen. Polymorphe DomĂ€nenabstraktion ermöglicht Programmierern mehrere Transformationen fĂŒr die selbe domĂ€nenspezifische Syntax bereitzustellen. Dies erhöht die FlexibilitĂ€t von SugarJ und unterstĂŒtzt bekannte Szenarien aus der modellgetriebenen Entwicklung. KommunikationsintegritĂ€t spezifiziert, dass die Komponenten eines Softwaresystems nur ĂŒber explizite KanĂ€le kommunizieren dĂŒrfen. Im Kontext von Codegenerierung stellt dies eine interessante Eigenschaft dar, welche die Generierung von impliziten ModulabhĂ€ngigkeiten untersagt. Wir haben KommunikationsintegritĂ€t als weiteres Prinzip zu SugarJ hinzugefĂŒgt.
Basierend auf SugarJ und zahlreicher Fallstudien argumentieren wir, dass flexible und prinzipientreue DomĂ€nenabstraktion ein skalierbares Programmiermodell fĂŒr die Entwicklung komplexer Softwaresysteme darstellt
Efficient Semiring-Weighted Earley Parsing
This paper provides a reference description, in the form of a deduction
system, of Earley's (1970) context-free parsing algorithm with various
speed-ups. Our presentation includes a known worst-case runtime improvement
from Earley's , which is unworkable for the large grammars that
arise in natural language processing, to , which matches the
runtime of CKY on a binarized version of the grammar . Here is the
length of the sentence, is the number of productions in , and is
the total length of those productions. We also provide a version that achieves
runtime of with when the grammar is represented
compactly as a single finite-state automaton (this is partly novel). We
carefully treat the generalization to semiring-weighted deduction,
preprocessing the grammar like Stolcke (1995) to eliminate deduction cycles,
and further generalize Stolcke's method to compute the weights of sentence
prefixes. We also provide implementation details for efficient execution,
ensuring that on a preprocessed grammar, the semiring-weighted versions of our
methods have the same asymptotic runtime and space requirements as the
unweighted methods, including sub-cubic runtime on some grammars.Comment: Main conference long paper at ACL 202