ANother Tool for Language Recognition

Slides:



Advertisements
Verwante presentaties
Week 9: Probabilistische Grammatica's Jurafsky & Martin (ed. 1), Hoofdstuk 12: Lexicalized and Probabilistic Parsing) Taaltheorie en Taalverwerking Remko.
Advertisements

Masterproef DGK
Databases via internet
Taaltheorie en Taalverwerking Week 4: Parseer-algoritmes.
Waar dienen al die toetsen eigenlijk voor?
Practica Computerlinguistiek Tekst en uitleg:
VBA en VBS Een introductie.
Instructie Programmeren Debuggen 5JJ70. Debuggen: Wat is het probleem Je programma compileert, maar werkt niet zoals verwacht, wat nu? Vraag je af: wat.
Phoenix Contact ILC150ETH F. Rubben, Ing.. Phoenix Contact ILC150ETH F. Rubben, Ing.
Hoofdstuk 6: Controle structuren
Grammatica’s en Ontleden
Functies op Proposities evalueer:: Bedeling  Prop  Bool tautologie:: Prop  Bool contradictie:: Prop  Bool equivalentie:: Prop  Prop  Bool vervulbaar::
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Tegengestelden / Synoniemen
1 Prof. Dr. Martine De Cock academiejaar Eenvoudige wiskundige uitdrukkingen.
Instructie Programmeren Task 5
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
1. Parsing (epsilon’s, tabellen) 2. Unificatie grammatica Natuurlijke taalverwerking week 7.
Natuurlijke taalverwerking week 4
AI91  Het Probleem  Grammatica’s  Transitie netwerken Leeswijzer: Hoofdstuk AI Kaleidoscoop College 9: Natuurlijke taal.
Numerieke Natuurkunde
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere.
Ontleden nNon-deterministisch m.b.v. Parser-combinators nDeterministisch m.b.v. Stack-machine type Parser a b = [a]  [ (b, [a]) ] type Parser a b = [a]
30 juni Deze morgen Vorige bijeenkomst: –een concepthierarchie van kernbegrippen in Logic & Language vakgebied (o.b.v. glossary) Vandaag: –Jon:
Opleiding INFORMATICA Programmeertaal Implementatie Taal ontwerp Vertalen.
PHP functies.
Parsing: Top-down en bottom-up
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 4.
Eenvoudig voorbeeld: Steden in Belgie
Inleiding tot recursie1 door Maarten Lemmens. Inleiding tot recursie2 Wat is recursie ?  Een procedure die zichzelf oproept.  Vb. in echte leven: Radio.
, 17h30Recursie 1 Inleiding tot recursie Karel Popelier.
Vakdidactiek 9/12/2002 Leen Depré
Liesbeth Van Raemdonck
24/11/2003LOGO - recursie - vliegers1 Recursie: Vliegers in vliegers Dieter Beheydt 24/11/2003.
Client-side scripting. 1.Scripting in webpagina’s 1. Verschillende talen VB: toepassingen in Windowsomgeving VBA: toepassingen in MS-Office VBScript internet.
Project Text To Speech Wat houdt het text-to-speech project in
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
PHP & MYSQL LES 01 PHP BASICS. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Visual Basic.NET voor studenten De VB- ontwikkelomgeving Hoofdstuk 2.
Taaltheorie en Taalverwerking Parsing Continued. Totnutoe: Top-Down-Parser.
Taal nEen Alfabet is… een eindige verzameling symbolen nEen Taal is… een deelverzameling van T* bij een bepaald alfabet T nEen Zin is… een element van.
Les 2: Zaterdag 24 mei 2014 Wim Peeters
Programmeerstijl Hoofdstuk 21. Visual Basic.NET voor studenten2 Inleiding Belang van een goede programmeerstijl:  Programma’s worden door meerdere mensen.
Mail: (of Sheets en verdere info: Onderwerp: vervolg C
Samenvatting hst. 3 sec. 1-3 ( ) :: Parser a b  Parser a b  Parser a b ( ) :: Parser a (b  c)  Parser a b  Parser a c ( ) :: (b  c)  Parser a b.
Tentamen vraag 1 Als L en M talen zijn, dan nL  M is gelijk aan { s  t | s  L, t  M } nL M is gelijk aan { s t | s  L, t  M } nL n is gelijk aan.
Parsing 1. Situering Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 2.
tircms02-p les 1 Operating Systems practicum
1 Introductie next MCT - Programmeren 2 © S. Walcarius Waarom java? programma machinetaal (.exe) compilen platformspecifiek Een exe programma.
Les 1: Zaterdag 10 mei 2014 Wim Peeters
1 XSLT processing & control Datamodellering 2006.
JAVA: een platformonafhankelijke taal
Definitie LL(1) Een grammatica is LL(1) nAls je op grond van het eerstvolgende input-symbool kunt kiezen uit alternatieven Formeel: nAls de lookahead-sets.
Spreadsheets. Testen. Met spreadsheets.. |  Spreadsheet, het meest gebruikte (test) tool in de wereld …  Aan de slag: Spreadsheet PRA  Risico’s en.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Definitie Taal van een grammatica nZij grammatica G = ( T, N, R, S ) nde taal van G is { z  T* | S  * z } L(G)
Tentamen vraag 1 nElke reguliere zin is ook contextvrij nElke reguliere taal is ook contextvrij nElke contextvrije grammatica is ook regulier nonsens “regulier”
Programmeren.
Java & het Web Programma: 3rd party libraries Standard actions (E)xpression (L)anguage.
Variabelen. Wat zijn variabelen? Klassiek: een variabele houdt informatie bij. Klassiek: een variabele houdt informatie bij. bvb: int getal; getal = 5;
Variabelen. Wat zijn variabelen? In een programmeertaal zijn er “dingen” nodig die ervoor zorgen dat het programma informatie voor korte of langere tijd.
Programmeren. Wat is programmeren? Het schrijven van opdrachten voor de processor De processor “spreekt” machinetaal:
Programmeren.
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Software Development fundamentals
Python – For loop + strings
Transcript van de presentatie:

ANother Tool for Language Recognition ANTLR ANother Tool for Language Recognition

Overzicht Inleiding: Antlr: what’s in a name? Vertalers: lexers en parsers LL parser voordelen, akkefietjes Antlrworks: debugger Productieregels voor output Boomgrammatica (Antlr tree grammar) Boomparser (Antlr tree parser) Programmatransformaties Besluit

Inleiding ANTLR = ANother Tool for Language Recognition programma om “compilers” te schrijven genereert parser voor front-end van compiler of voor domein-specifieke toepassing ANTLRWorks = antlr programmeeromgeving auteurs antlr:Terence Parr (UoSF) antlrworks: Jean Bovet (master student) locatie:http://www.antlr.org tutorial:http://www.ociweb.com/jnb/jnbJun2008.html boek: the definitive Antlr reference CT467

Inleiding ANTLR v3 is geschreven in Java Genereert gramatica’s in Java, C, C#,.. Motor = LL(*) top-down parser Vgl. lex/yacc: LR bottom-up Antlr gaat extra mile: Antlrworks: debug grammatica tijdens parsen Tree parser: parser van interne boomvoorstelling String template (source  source herschrijven)

Vertaler Wat is een vertaler? Een vertaler leest een invoertekst, analyseert de structuur en schrijft een uitvoertekst Werking? Invoertekst is een stroom bytes. Deze wordt naar “handelbare” vorm gebracht in 2 fasen: Lexicale analyse: vormt woorden  alfabet Semantische analyse: vormt zinnen  taal

Lexicale Analyse Doel: “uit de stroom van bytes betekenisvolle woorden en leestekens te halen die eigen zijn aan de programmeertaal.” = tokens met attributen Vb.: 5 = geheel getal met waarde 5 a = variabele met naam “a”

Lexicale Analyse Tokens in EBNF, in hoofdletters, vb: NUM : ('0'..'9')+; ALF : ‘A'..‘Z'|’a’..‘z'; ID : ALF (ALF|NUM)*; + : ≥ 1 (herhalingsteken, minstens 1) * : ≥ 0 (herhalingsteken, minstens 0) | : “of” Resultaat: “tokens”

Grammaticale Analyse Voldoet: 3, alfa, a+b; ander vb: Grammatica definieert geldige zinnen, in kleine letters, bv. expr: expr : NUM | ID | expr '+' expr; Voldoet: 3, alfa, a+b; ander vb: var : ID; assign : var '=' expr; Resultaat: “grammaticaregels”

Grammaticale Analyse Parsing met productieregels non-terminals

Grammaticale Analyse Afleiding (derivation) = substitutie van nonterminals (ouder) door zijn productie (kinderen)  parseboom

Grammaticale Analyse Rechtse of linkse afleiding substitutie van meest rechtse of meest linkse nonterminal door productie  parseboom Toepassing: a : = 7 ; b : = c + (d := 5 + 6 , d) Lexicale tokenstroom: id : = num; id : = id + (id := num + num, id)

Afleiding Voorbeeld a : = 7 ; b := c + ( d := 5 + 6 , d) 1 3 2 4 5 6 7 8 9 10 11 12 Afleiding Voorbeeld a : = 7 ; b := c + ( d := 5 + 6 , d) Lexicale tokenstroom: id : = num; id : = id + ( id := num + num, id)

Afleiding Voorbeeld a : = 7 ; b := c + (d := 5 + 6 , d) Lexicale tokenstroom: id : = num; id : = id + (id := num + num, id) Afleiding 1 3 2 4 5 6 7 8 9 10 11 12

Linkse Afleiding Voorbeeld a : = 7 ; b := c + (d := 5 + 6 , d) Lexicale tokenstroom: id : = num; id : = id + (id := num + num, id) Linkse Afleiding 1 2 4 5 3 6

Contextvrije grammatica Contextvrij = substitutie kan uitgevoerd worden onafhankelijk van de context = symbolen voor en na de substitutie Ambigue grammatica: waneer meerdere parsebomen mogelijk zijn

Predictieve Parser (LL) Principe: de afleidingsregel voor non-terminals wordt bepaald door het ingelezen token, d.w.z. door de ingelezen terminal. Kan gerealiseerd worden door een Recursive descent parser

Predictieve Parser (LL) Recursieve afdaling algoritme: 1 functie voor elke niet-terminaal 1 case voor elke productie Vb.: grammatica

3.2. Predictieve parsing Recursieve afdaling algoritme:

Grammatica in Antlr TOKENS = terminals regels = nonterminals grammar = regels + tokens prog = startregel grammar prog; prog : assign+ EOF; assign : var '=' expr '\r\n'+; var : ID; expr : NUM | ID | expr '+' expr; NUM : ('0'..'9')+; ALF : ('a'..'z'|'A'..'Z')+; ID : ALF (ALF|NUM)*;

Grammatica in AntlrWorks

Linkse recursie conflict In AntlrWorks:

Linkse recursie conflict Ambiguïteit: welke regel start met dit token? bij input ID: expr  ID of expr  expr + expr ? beide regels kunnen met ID starten...

Linkse recursie conflict Regel E start met E [1] E  E + T [2] E  T First(X)  start-tokens van regel (X) First(E) = First(E+T) U First(T)  welke productie: 1 of 2 ?

Linkse recursie herschrijven Oplossing: a) herken ET|E+T als ET +T +T + .... +T b) herschrijf tot rechtse recursie E T (+T)*

Linkse recursie herschrijven Linkse recursie wegwerken grammar prog; prog : assign+ EOF; assign : var '=' expr '\r\n'+; var : ID; expr : NUM | ID | expr '+' expr; NUM : ('0'..'9')+; ALF : ('a'..'z'|'A'..'Z')+; ID : ALF (ALF|NUM)*; Linkse recursie wegwerken door extra term

Linkse recursie herschrijven Linkse recursie wegwerken grammar prog; prog : assign+ EOF; assign : var '=' expr '\r\n'+; var : ID; term : NUM | ID; expr : term (‘+’ term)*; NUM : ('0'..'9')+; ALF : ('a'..'z'|'A'..'Z')+; ID : ALF (ALF|NUM)*; Linkse recursie wegwerken door extra term

Debuggen in AntlrWorks Eenvoudige grammatica Debuggen alfa=5 b=2+a

Debuggen in AntlrWorks Debuggen: input alfa=5 b=2+a

Debuggen in AntlrWorks Debuggen: input + startregel alfa=5 b=2+a

Debuggen in AntlrWorks alfa=5 b=2+a

Gegenereerde bestanden Wat genereert ANTLRWorks nu uit grammatica prog.g? progLexer.java, progParser.java main: __Test__.java  parser  lexer input: __Test__input.txt

Tokens en parseboom Debuggen – tokens + parseboom alfa=5 b=2+a

Gegenereerde bestanden Structuur van het testprogramma:

Acties of producties toevoegen Acties bij herkenning van tokens of regels regels: groen tokens: blauw grammatica: “token” lexer: “A”... “U”

Acties of producties toevoegen @members = helper code actie: tel klinkers

Acties of producties toevoegen @members = helper code actie: tel klinkers

Acties: tel klinkers Input: “aaeaiiou” Output en Afleidingsboom

Lexicale en grammaticale analyse FRONT-END Lexicale analyse produceert tokens token = type van woord (bv. getal, “if”)

Lexicale en grammaticale analyse FRONT-END Grammaticale analyse produceert syntax. AST = abstracte syntaxboom met betekenis van programma bewaart. Meestal is er extra informatie in symbooltabellen, afhankelijkheidsgrafen ...

Lexicale analyse en parsing BACK-END De back-end loopt de AST af en genereert de output

Boomgenerator ANTLR genereert ook “CommonTree” bomen Nut: overzichtelijke structuur,  boomvoorstellingen in  fasen, programmatransformaties. CommonTree bomen kunnen gegenereerd worden met de optie {output=AST}.

Boomgenerator CommonTree bomen kunnen gegenereerd worden met de optie {output=AST}. Boomoperaties zijn productieregels: operator om boom te maken: ^(... ...) Vb.: ^(wortel blad_1 ... blad_n) genereert

Boomgenerator Boom-grammatica: De output: via apart testprogramma....

Boomgenerator Testprogramma: ast = parser g  g.prog_ast  getTree() print ast met ast.toStringTree().

Boomgenerator Resultaat van boomgeneratiegrammatica prog_ast: = gewone output ($prog_ast.text) + tree ouput (ast.toStringTree()).

Boomgenerator ANTLR genereert “CommonTree” bomen Nut: programmatransformaties. Voorbeeld: for-lus 2x ontrollen in f.g

Boomgenerator TreeRewrite.g leest “CommonTree” genereert getransformeede lus Genererende tokens uit = f.g Grammatica f wordt ook gebruikt voor testprogramma in AntlrWorks!

Boomgenerator TreeRewrite.g leest “CommonTree” genereert getransformeede lus Genererende tokens uit = f.g Grammatica f wordt ook gebruikt voor testprogramma in AntlrWorks!

Boomgenerator TreeRewrite leest “CommonTree” bomen en genereert getransformeede lus

Boomgenerator Lustransformatie: Input: Output: for (i=0; i < n; i++) { s = f(i); v = g(k); } for (i=0; i < n; i++) { s = f(i); v = g(k); }

Besluit ANTLR is zeer vriendelijk in gebruik Extra mijl: booomparsers en parser IDE Veel documentatie ( o.a. Davy…) Extra’s: refactoring, semantische predicaten, multilanguage, web-support

 Besluit ANTLR is zeer vriendelijk in gebruik Extra mijl: booomparsers en parser IDE Veel documentatie ( o.a. Davy…) Extra’s: refactoring, semantische predicaten, multilanguage, web-support 