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.

Slides:



Advertisements
Verwante presentaties

Advertisements

Hogere-ordefuncties nEen lijst langs lopen en met elk element iets doen nEen lijst langs lopen en sommige elementen selecteren map filter.
Reductiemachine Functionele talen en dus de -calculus, worden vaak geïmplementeerd door een reductiemachine. De elementaire stap is een reductie, en de.
Het type int Tekenen met Java operatoren
Klassen en objecten.
Conditionele expressie
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
Polymorf zoeken zoek :: (a  a  Bool)  [ (a, b) ]  a  b zoek eq [ ] x = ??? zoek eq ((a,b):ts) x | eq a x = b | otherwise = zoek eq ts x MayBe b No.
Grammatica’s en Ontleden
Hoofdstuk 2 Hallo, C# !.
Hogere-orde functies: herhaald patroon? Parametrizeer! product :: [Int]  Int product [ ]= product (x:xs)= 1 product xs x * and :: [Bool]  Bool and [
Functies op Proposities evalueer:: Bedeling  Prop  Bool tautologie:: Prop  Bool contradictie:: Prop  Bool equivalentie:: Prop  Prop  Bool vervulbaar::
Hoger-ordefuncties op lijsten nDoorloop een lijst en... map :: (a  b)  [a]  [b] filter :: (a  Bool)  [a]  [a] foldr :: (a  a  a)  a  [a]  a.
Natuurlijke-Taalinterfaces week 3 1. evaluatie van een formule in een model 2. vraag-antwoord dialogen 3. Modellen en applicaties.
Inleidend probleem Data structuur (hiërarchie van classes)
Functies als Getallen Jan Martin Jansen.
-calculus.
Functies definiëren nDoor combinatie van standaardfuncties fac :: Int  Int fac n = product [1..n] oneven :: Int  Bool oneven n = not (even n) negatief.
Char en String nCharéén letter uord ::Char  Int uchr ::Int  Char nString[Char] uwords :: String  [String] uunwords :: [String]  String ”hoi” ”CKI”
Hogere-ordefuncties nVoeg de elementen van een lijst samen nCombineer twee functies foldr :: (a  b  b)  b  [a]  b [a] (.) :: (b  c)  (a  b)  a.
Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere.
Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.
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]
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Oefeningen Hoofdstuk 3.
Opleiding INFORMATICA Programmeertaal Implementatie Taal ontwerp Vertalen.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
ANother Tool for Language Recognition
Arrays.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere.
Inleiding tot programmeren
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
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
JAVA: een platformonafhankelijke taal
PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!
Functioneel programmeren Een snelle herhaling…. Functie-definitie static int kwad (int x) { return x*x ; } kwad x = x * x Haskell kwad :: Int  Int.
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.
AWK A Pattern scanning and processing language made by Aho Weinberger Kernighan and explained by Albert Montijn.
In een reguliere taal… zin yxz S E A B vuwuwxzvuwxzvvuwxzvvvuwxzvvv lengte  n.
(S)DT Haskell Functioneel programmeren.
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”
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Klasse uit library Android.App Activity Bij het starten van een app: nOperating system maakt een Activity -object aan… n…en neemt dat onderhanden met de.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
Informatie beoordelen If else Switch En Wiskunde.
Objectgeoriënteerd Programmeren (2)
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Keuzeopdrachten
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Expressies
Windows-applicatie using System.Windows.Forms; using System.Drawing;
vandaag èn vrijdag deadline maandag 12 dec.
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Gameprogrammeren: Herhalingen
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Aanroep van een methode voert opdrachten uit in de body daarvan
Implementatie Zoekboom
Object Communication (Jewel Jam)
TOP met iTasks 2.
Software Development fundamentals
Transcript van de presentatie:

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 een taal nEen Zin van een taal is… een element van die taal

Definitie: (§2.1) Samenstellen van talen L  M L M L0L0 L n+1 L*L* L+L+ L { s t | s  L, t  M } {  } L L n L 0  L 1  L 2  L 3  …… L 1  L 2  L 3  …… T* – L Zoals in de verzamelingenleer

Definitie (§2.3) Taal van een grammatica nZij grammatica G = ( T, N, R, S ) nde taal van G { z  T* | S  * z } L(G)

Definitie (§2.3) Taal van een nonterminal nZij grammatica G = ( T, N, R, S ) nde taal van G nDe taal van een bepaalde A  N { z  T* | S  * z } L(G) { z  T* | A  * z } L(A)

Definitie (§2.7) Samengestelde grammatica nZij G 1 = ( T, N 1, R 1, S 1 ) G 2 = ( T, N 2, R 2, S 2 ) N 1  N 2 =  nAls G = ( T,N 1  N 2  {S},R 1  R 2  { S  S 1, S  S 2 }, S ) nDan is L(G) L(G 1 )  L(G 2 ) Stelling

Stelling (§2.7) Samengestelde grammatica nZij G 1 = ( T, N 1, R 1, S 1 ) G 2 = ( T, N 2, R 2, S 2 ) N 1  N 2 =  nAls G = ( T,N 1  N 2  {S},R 1  R 2  { S  S 1, S  S 2 }, S ) nDan is L(G) L(G 1 )  L(G 2 )

Stelling (§2.7) Samengestelde grammatica nZij G 1 = ( T, N 1, R 1, S 1 ) G 2 = ( T, N 2, R 2, S 2 ) N 1  N 2 =  nAls G = ( T,N 1  N 2  {S},R 1  R 2  ……, S ) nDan is L(G)L(G 1 ) L(G 2 ) { S  S 1 S 2 }

Stelling (§2.7) Samengestelde grammatica nZij G 1 = ( T, N 1, R 1, S 1 ) nAls G = ( T,N 1  {S},R 1  ……, S ) nDan is L(G)L(G 1 ) * { S  , S  S 1 S }

Stelling (§2.7) Samengestelde grammatica nZij G 1 = ( T, N 1, R 1, S 1 ) nAls G = ( T,N 1  {S},R 1  ……, S ) nDan is L(G)L(G 1 ) + { S  S 1, S  S 1 S }

Definitie (§2.7) Samengestelde grammatica nZij G 1 = ( T, N 1, R 1, S 1 ) nAls G = ( T,N 1  {S},R 1  ……, S ) nDan is L(G)L(G 1 ) ? { S  , S  S 1 }

Probleem (§2.7) Samengestelde grammatica nZij G 1 = ( T, N 1, R 1, S 1 ) G 2 = ( T, N 2, R 2, S 2 ) N 1  N 2 =  nAls G = ( T,N 1  N 2  {S},R 1  R 2  ……, S ) nDan is L(G) L(G 1 )  L(G 2 ) ??? Onoplosbaar probleem (§9.3)

Afkorting-notatie nLangn Kort P   P  a P  b P  aPa P  bPb P   a  b  aPa  bPb BNF Backus-Naur Form

Afkorting-notatie nLangn Kort A   A  X A A  X* EBNF Extended Backus-Naur Form B  X + B  X B  X B C  X ? C   C  X

ANTLR-notatie Expr:Term ( PLUS Term | MINUS Term ) * ; Term :Getal | LPAREN Expr RPAREN ; PLUS : ‘+’ ; MINUS : ‘–’ ; LPAREN : ‘(’ ; RPAREN : ‘)’ ; class ExprParser extends Parser class ExprLexer extends Parser

ANTLR genereert Java Expr: Term ( PLUS Term | MINUS Term ) * ; Term : INT | LPAREN Expr RPAREN ; public void expr () { term (); loop1: while (true) { switch(sym) { case PLUS: match(PLUS); term (); break; case MINUS: match(MINUS); term (); break; default: break loop1; } public void term() { switch(sym) { case INT: match(INT); break; case LPAREN: match(LPAREN); expr (); match(RPAREN); break; default: throw new ParseError(); }

ANTLR-notatie Expr :Term ( PLUS Term | MINUS Term ) * ; Term :GETAL | LPAREN Expr RPAREN ; returns [int x=0] { int y; } returns [int x=0] x=x= y=y= y=y= x=x= { x += y; } { x –= y; } n:n: { x = str2int(n.getText(); }

ANTLR-Architectuur Expr. g ExprMain. java ExprLexer. java ExprParser. java ANTLR *. class Java compiler Antlr. jar Java interpreter zin

Haskell Parser Combinator Architectuur Expr. hsParseLib. hs Haskell interpreter zin

ANTLR vs. ParserCombinators nGrammatica schrijven in apart taaltje nGenereert Java-code nGroot, ingewikkeld nGeen linksrecursie nGeen ambiguiteit n1-symbool lookahead nJava n Grammatica schrijven met Haskell-operatoren n Is gewone Haskell-library n Kort n Geen linksrecursie n Wel ambiguiteit n Onbeperkt lookahead n Haskell

Samenvatting hst. 3 sec. 1-3 nType van parsers nElementaire parsers nParser-combinators type Parser a b = [a]  [ (b, [a]) ] lijst resultaten i.v.m. ambiguïteit satisfy :: (a  Bool)  Parser a a succeed :: b  Parser a b failp :: Parser a b ( ):: Parser a b  Parser a b  Parser a b ( ):: Parser a (b  c)  Parser a b  Parser a c ( ):: (b  c)  Parser a b  Parser a 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  Parser a c (p q) xs = p xs ++ q xs (p q) xs = [(f b,zs) | (f,ys)  p xs, (b,zs)  q ys] (f p) xs = [ (f b,ys) | (b,ys)  p xs ] infixl 6 infixl 7 infixr 4

Parser combinatoren voor EBNF X  Y* many :: Parser a b  Parser a [b] many p = p many p epsilon (\b bs  b:bs) (\e  [ ]) je hoeft niet eens de string te benoemen! many p = p many p succeed [ ](:)

Parser combinatoren voor EBNF X  Y + many1 :: Parser a b  Parser a [b] many1 p = p many p (:) nooit leeg naam :: Parser Char String naam = many1 (satisfy isAlpha) getal :: Parser Char Int getal = many (satisfy isDigit) foldl f 0 where f n c = 10*n + ord c – ord ‘0’

Parser combinatoren voor EBNF X  Y ? option :: Parser a b  Parser a b option p = p epsilon (\x  d)  b default-waarde option’ :: Parser a b  Parser a [b] option’’ :: Parser a b  Parser a (Maybe b) succeed d d

Parser combinatoren voor EEEEEBNF X  ( Y ) pack :: Parser a o  Parser a b  Parser a s  Parser a b pack p q r = p q r (\o b s  b) gehaakt p = pack (symbol ‘(’) p (symbol ‘)’) geblokt p = pack (symbol ‘[’) p (symbol ‘]’) gepakt p = pack (token “begin”) p (token “end”)

Parser combinatoren voor EEEEEBNF X  ABC many:: Parser a b  Parser a [b] sequence:: [ Parser a b ]  Parser a [b] sequence [ ]= sequence (p:ps)= succeed [ ] (:) p sequence ps sequence = foldr f (succeed []) where f p r = (:) p r

Parser combinatoren voor EEEEEBNF X  A|B|C choice :: [ Parser a b ]  Parser a b choice= foldr ( ) fail

Parser combinatoren voor EEEEEBNF X  B;B;B listOf:: Parser a b  Parser a s  Parser a [b] listOf p s = p many ( s p ) separator (\s b  b) (:)

Parser combinatoren voor EEEEEBNF XB+B+BXB+B+B chainr :: Parser a b  Parser a (b  b  b)  Parser a b chainr pe po = many ( pe po ) pe operator (\e o  (e`o`)) (\fs x  foldr apply x fs) A + B + C + D((A+). (B+). (C+)) D

Parser combinatoren voor EEEEEBNF XB+B+BXB+B+B chainl :: Parser a b  Parser a (b  b  b)  Parser a b chainl pe po = pe many ( po pe ) operator (\o e  (`o`e)) (\x fs  foldl ylppa x fs) A + B + C + D((+D). (+C). (+B)) A

Abstracte syntax voor Expressies data Expr =ConInt |VarString |FunString [Expr] |Expr :+: Expr |Expr :–: Expr |Expr :*: Expr |Expr :/: Expr

Parser voor Expressies (met prioriteiten) expr= chainr term (symbol ‘+’) term= chainr fact (symbol ‘*’) fact= getal gehaakt expr (\o  (:+:)) (\o  (:*:)) Con ( (\o  (:–:)) (symbol ‘–’) ) ( (\o  (:/:)) (symbol ‘/’) ) Var naam Fun naam gehaakt (listOf expr (symbol ‘,’) ) chainl is nu beter

Parser voor Expressies (principe) expr= chainr term(… (:+:)…‘+’ … … (:–:)…‘–’ … ) term= chainr fact(… (:*:)…‘*’ … … (:/:)…‘/’ … ) fact= basis gehaakt expr gen ops next = chainr next ( choice …ops… )

Parser voor Expressies (veel prioriteiten) expr= gen ops1 term1 term1= gen ops2 term2 term2= gen ops3 term3 term3= gen ops4 term4 term4= gen ops5 fact fact= basis gehaakt expr expr = foldr gen fact [ops1,ops2,ops3,ops4,ops5] gen ops next = chainr next ( choice …ops… )