Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9



Ähnliche Dokumente
Grundbegriffe der Informatik

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Kapitel 2. Lexikalische Analyse. Lexikalische Analyse Wintersemester 2009/10 1 / 57

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

10 Erweiterung und Portierung

Theorie der Informatik

Fachseminar WS 2008/09

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Java: Vererbung. Teil 3: super()

Grammatiken. Einführung

ARAkoll 2013 Dokumentation. Datum:

Wissenswertes über binäre Felder

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Version 0.3. Installation von MinGW und Eclipse CDT

Robot Karol für Delphi

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

Was ist ein Compiler?

Melde- und Veröffentlichungsplattform Portal (MVP Portal) Hochladen einer XML-Datei

Binär Codierte Dezimalzahlen (BCD-Code)

A1.7: Entropie natürlicher Texte

Ohne Fehler geht es nicht Doch wie viele Fehler sind erlaubt?

Anleitung Redmine. Inhalt. Seite 1 von 11. Anleitung Redmine

Formale Sprachen und Grammatiken

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Java Einführung Packages

QR Code. Christina Nemecek, Jessica Machrowiak

Neuer Releasestand Finanzbuchhaltung DAM-EDV E Inhaltsverzeichnis. 1. Neuerungen Schnittstelle Telebanking mit IBAN und BIC...

Gussnummern-Lesesystem

AcQuickPrint / AcSetPrinter Publizieren leicht gemacht / Drucker in Layouts tauschen

Generatives Programmieren

ObjectBridge Java Edition

Bedienerhandbuch Toleranztabellen Version 1.2.x. Copyright Hexagon Metrology

TECHNISCHE DOKUMENTATION ZUM TURBO-FREEZER XL 3 & XE 1

Enterprise Applikation Integration und Service-orientierte Architekturen. 09 Simple Object Access Protocol (SOAP)

Installation von MailON2!

teischl.com Software Design & Services e.u. office@teischl.com

Wichtige Information zur Verwendung von CS-TING Version 9 für Microsoft Word 2000 (und höher)

Programmiersprachen und Übersetzer

impact ordering Info Produktkonfigurator

Handbuch EPLAN Electric P8

Informationen zum neuen Studmail häufige Fragen

Buddy - Algorithmus Handbuch für Endnutzer Stand

Noten ausrechnen mit Excel/Tabellenkalkulation. 1) Individuellen Notenschlüssel/Punkteschlüssel erstellen

Leitfaden Internet-Redaktion kursana.de

Copyright 2014 Delta Software Technology GmbH. All Rights reserved.

Theoretische Informatik I

Leitfaden für die Mitgliederregistrierung auf der neuen Webseite des SFC-Erkelenz

Praktikum Compilerbau

BEO-SANKTIONSPRÜFUNG Eine Einführung zum Thema Sanktionsprüfung und eine Übersicht zur BEO-Lösung.

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

Modul CTO Barcode für Windows Seite 1

Erstellen von x-y-diagrammen in OpenOffice.calc

Predictive Modeling Markup Language. Thomas Morandell

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Sparda mobiletan Nutzungsanleitung

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Schumacher, Chris Druckdatum :11:00

2. Installation der minitek-app auf einem Smartphone. 3. Verbindung zwischen minitek-app und minitek herstellen

Motorsegler Reservierungs-System. Reservierungsplatz

Anleitung Redmine. Inhalt. Seite 1 von 11. Anleitung Redmine

7. Bewässerung: Mehrmals pro Woche

Softwareentwicklungsprozess im Praktikum. 23. April 2015

LANiS Mailversender ( Version 1.2 September 2006)

ECAS Benutzerhandbuch

Anforderungen an die HIS

Benutzung der LS-Miniscanner

kleines keyword brevier Keywords sind das Salz in der Suppe des Online Marketing Gordian Hense

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

TYPO3 CMS 6.2 LTS. Die neue TYPO3- Version mit Langzeit- Support

Inhaltsverzeichnis

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Kurzanleitung für Verkäufer

Barcode Master. Barcode Generator für PC Windows und MAC OS. Bedienungsanleitung und Handbuch. Version 1.1. Dr.J.Willrodt /

Übersicht U7-U10 Turniere in Fußball Online

Vorbereitung auf die SEPA-Umstellung

4 Aufzählungen und Listen erstellen

Bereich METIS (Texte im Internet) Zählmarkenrecherche

Mathematische Grundlagen der Informatik 2

YouTube: Video-Untertitel übersetzen

DEUTSCHE GESELLSCHAFT FÜR ZERSTÖRUNGSFREIE PRÜFUNG E.V.

Anleitung: Passwort-Self-Service-Portal

Erstellen der Barcode-Etiketten:

Erfahrungen mit Hartz IV- Empfängern

(H ist Entropie) bei Redundanz Information vielleicht mehrfach. Redundanz zur Fehlererkennung und -korrektur nutzbar

Kapitel 7 - Wägungen

Programmteil Bautagebuch

Whitepaper. Produkt: combit Relationship Manager 7. combit Relationship Manager -rückläufer Script. combit GmbH Untere Laube Konstanz

Bedienungsanleitung. Matthias Haasler. Version 0.4. für die Arbeit mit der Gemeinde-Homepage der Paulus-Kirchengemeinde Tempelhof

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Kontaktlos bezahlen mit Visa

Das PC-Topp.NET Abfall-Terminal

Arbeiten mit UMLed und Delphi

Die Excel Schnittstelle - Pro Pack

Wurzeln als Potenzen mit gebrochenen Exponenten. Vorkurs, Mathematik

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Die Post hat eine Umfrage gemacht

Transkript:

Kapitel 4 Einführung in den Scannergenerator Flex Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Generatoren für die lexikalische Analyse Scannergeneratoren werden eingesetzt um die lexikalische Analyse eines Compilers möglichst kompakt und einfach zu spezifizieren (eine Domain Specific Language). Eingabe: Ein Zeichenstrom (ASCII, UTF-8,...) Ausgabe lässt sich meist in der Beschreibungssprache spezifizieren. Mehrere Möglichkeiten zur Anbindung eines Parsers: Push-Schnittstelle: Bei erkanntem Token wird eine Methode des Parsers aufgerufen Pull-Schnittstelle: Der Parser ruft eine Methode im Lexer auf um das nächste Token zu bekommen. Meist am einfachsten zu programmieren. Pufferung: Tokenstrom wird vor Syntaxanalyse teilweise oder komplett vorberechnet. Dies kann günstiger für den Cache sein. Typischerweise keine automatische Unterstützung für Symboltabellen (da oft sehr sprachspezifisch) und Fehlerbehandlung. Einführung in den Scannergenerator Flex Wintersemester 2008/09 2 / 9

Verbreitete Generatoren Lex/Flex: Werkzeug zur Generierung von Scannern bekannt aus dem Unix-/C-Umfeld. Spezifikation von regulären Ausdrücken erzeugt Tabellengesteuerten Scanner. Flex ist eine Open-Source Implementierung von Lex. Zahlreiche Portierungen auf andere Programmiersprachen. Beispiele: JLex (Java), CsLex (C#), Alex (Haskell),... Es gibt auch Scanner die nicht mit regulären Ausdrücken/endlichen Automaten arbeiten. Ein bekannter Vertreter ist antlr der LL(k) Grammatiken benutzt. Einführung in den Scannergenerator Flex Wintersemester 2008/09 3 / 9

Vor- und Nachteile von Generatoren Vorteile: Die Spezifikation von Scannern ist kompakt verständlich und gut wartbarer Code, weniger Fehler Automatische Konsistenzprüfung Kurze Entwicklungszyklen, schnelles Prototyping möglich Scannergeneratoren erzeugen sehr performanten Code. Nachteile: Neue Sprache/Werkzeug muss erlernt werden Integration in Buildsystem notwendig Fehlersuche oft sehr mühsam da generierter Code für Menschen schlecht lesbar Fehlende Flexibilität; In der Praxis gibt es häufig kleinere Ausnahmen die man nur umständlich oder gar nicht mit Generatoren umsetzen kann. Einführung in den Scannergenerator Flex Wintersemester 2008/09 4 / 9

1 Generatoren 2 JLex/Flex Einführung in den Scannergenerator Flex Wintersemester 2008/09 5 / 9

Scanner für XML XML-Dateien lassen sich in Tokens zerlegen. Beispiel: <?xml version= 1.0?> <!-- my personal books --> <books> <book name= Goedel, Escher, Bach /> </books> : Strings : XML-Namen : weitere Tokens Einführung in den Scannergenerator Flex Wintersemester 2008/09 6 / 9

Scanner für XML XML-Dateien lassen sich in Tokens zerlegen. Beispiel: <? xml version = 1.0?> <!-- my personal books --> < books > < book name = Goedel, Escher, Bach /> </ books > : Strings : XML-Namen : weitere Tokens Einführung in den Scannergenerator Flex Wintersemester 2008/09 6 / 9

Reguläre Ausdrücke Spezifikation Regulärer Ausdrücke in Flex (Auszug): x Zeichen x erkennen xy Zeichenkette xy erkennen (ohne Interpretation) \x Zeichen x erkennen (ohne Interpretation). Jedes Zeichen außer Zeilenumbruch erkennen [xyz] Zeichen x, y oder z erkennen [abj-oz] Zeichen a, b, Z oder Zeichen von j bis o erkennen [^A-Z] Alle Zeichen außer den Zeichen von A bis Z erkennen x y x oder y erkennen (x) x erkennen (verändert die Bindung) x* 0, 1 oder mehrere Vorkommen von x erkennen x+ 1 oder mehrere Vorkommen von x erkennen x? 0 oder 1 Vorkommen von x erkennen {Name} Expansion der Definition Name \t,\n,\r Tabulator, Zeilenumbruch, Wagenrücklauf erkennen Einführung in den Scannergenerator Flex Wintersemester 2008/09 7 / 9

Spezifikation NameStartChar [ a za Z ] NameChar { NameStartChar } [\ \.0 9] Name { NameStartChar }({ NameChar }) Comment <! ([ˆ\ ] [ˆ\ ]) > S t r i n g \ [ ˆ \ ] \ \ [ ˆ \ ] \ Token <? < / < / > >? > = %% { S t r i n g } p r i n t f ( S t r i n g : %s \n, y y t e x t ) ; {Name} p r i n t f ( Name : %s \n, y y t e x t ) ; {Comment} / s k i p / {Token} p r i n t f ( Token : %s \n, y y t e x t ) ;. \ n / s k i p / %% i n t main ( v o i d ) { y y l e x ( ) ; r e t u r n 0 ; } Einführung in den Scannergenerator Flex Wintersemester 2008/09 8 / 9

Spezifikation NameStartChar [ a za Z ] NameChar { NameStartChar } [\ \.0 9] Name { NameStartChar }({ NameChar }) Comment <! ([ˆ\ ] [ˆ\ ]) > S t r i n g \ [ ˆ \ ] \ \ [ ˆ \ ] \ Token <? < / < / > >? > = %% { S t r i n g } p r i n t f ( S t r i n g : %s \n, y y t e x t ) ; {Name} p r i n t f ( Name : %s \n, y y t e x t ) ; {Comment} / s k i p / {Token} p r i n t f ( Token : %s \n, y y t e x t ) ;. \ n / s k i p / %% i n t main ( v o i d ) { y y l e x ( ) ; r e t u r n 0 ; } Einführung in den Scannergenerator Flex Wintersemester 2008/09 8 / 9

Verwendung von Flex $ f l e x o s c a n n e r. c s c a n n e r. l $ gcc s c a n n e r. c l f l o s c a n n e r $. / s c a n n e r < t e s t. xml Token : <? Name : xml Name : v e r s i o n Token : = S t r i n g : 1. 0 Token :?> Token : < Name : books Token : > Token : < Name : book Name : name Token : = S t r i n g : Goedel, Escher, Bach Token : /> Token : </ Name : books Token : > test.xml: <?xml v e r s i o n = 1.0? > <! my p e r s o n a l books > <books> <book name= Goedel, Escher, Bach /> </books> Einführung in den Scannergenerator Flex Wintersemester 2008/09 9 / 9