JavaCC Top-down (Recursive descent). Mest populære mht Java. Regulær grammatik og Context-free grammatik i en fil. Tillader EBNF: (..)*, (..)+ og (..)?

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

C# introduktion. using System; Namespace MyFirst { class eks1 { public static void Main() { Console.WriteLine("Hej!"); Console.Write("Skriv dit navn her:
1 Frameworks. 2 Plan Frameworks • Kollektioner • Input/output Nyt designmønster: Decorator.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Begreber og Redskaber 1 BRP.
Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
1 Parsing. 2 Mål: Et program til indlæsning og beregning af aritmetiske udtryk Eksempel: Beregn (3*5 + 4/2) - 1 Løs et lettere problem først: Læs en streng.
Selve objektet versus referencen til objektet Nedarvning
Automater, sprog og compilere
Grundlæggende programmering Efterår 2001
Objekter og klasser Applikationsdesign Code Namespace Value og reference typer Reference type Rasmus D. Lehrmann1.
Hvordan man skriver koden.
Tietgen Skolen Trick med facadeklasse og serialisering ”Trick” – model ”samles” til eet overordnet objekt Alle klasser i model skal have attriutten [Serializable]
Sproghistorie Syntaks (struktur) Semantik (Indhold)
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
C# programmering Per P. Madsen Afd. for Proceskontrol
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Forelæsning 3.1 Collections Javas for-each løkke
Buttom-up parsning: Hvor er vi Mellem- kode Kald til Runtimesys. Mellemk.- optimering Kode- generering Kode- optimering Leksikalsk- analyse Syntax- analyse.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
To måder at overføre objekt- referencer mellem processer (1) Via naming service - interface RMISolver (2) Som parametre til fjernprocedurekald - interface.
Sprog og grammatik Et sprog L(G) er mængden af sætninger afledt af grammatikken G. Grammatik er en 4-tupel: G={N, ,P,S}. Hvor: N er et sæt af non-terminale.
Fundamentale datastrukturer
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
Klasser.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
Begreber og Redskaber 1 BRP.
11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
Paradigmer i Programmering 4. Resten af ML -Læse fra/skrive til filer -Interaktive programmer -Separat oversættelse -Parsergeneratorer.
Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
C#: Data Typer. 2 Nordjyllands Erhvervakademi Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies,
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Fromelle sprog Per P. Madsen Afd. for proceskontrol.
Quiz – Uge 2 – torsdag – første time
Klasser og objekter (Afsnit i manualen).
Quiz – Uge 3 – torsdag – første time
Quiz – Uge 3 – torsdag – første time
Præsentationens transcript:

JavaCC Top-down (Recursive descent). Mest populære mht Java. Regulær grammatik og Context-free grammatik i en fil. Tillader EBNF: (..)*, (..)+ og (..)?

EBNF Pprogram-> 'program' '(' IdT ')' ( vartypelist)* 'begin' (statement)* 'end’ vartypelist-> ('float' | 'int') IdT varlist ';’ Varlist-> (',' IdT)* Statement-> IdT '=' expA ';’ Exp-> term (('+' | '-') term)* Term-> sexp (('*' | '/') sexp)* Sexp-> '-' element | element Element-> '(' exp ')' | IdT

JavaCC PARSER_BEGIN ( ) PARSER_END ( ) ( )* Opbygning af: Fo.jj

JavaCC options { LOOKAHEAD=1; JAVA_UNICODE_ESCAPE=true; } PARSER_BEGIN(parser_1) public class parser_1 { public static void main(String args[]) throws ParseException { parser_1 parser; parser = new parser_1(System.in); parser.program(); } PARSER_END(parser_1) ”Grammatik” Opbygning af: parser_1.jj parser = new parser_1(new java.io.FileInputStream(”filnavn”));

JavaCC compileren. > javacc parser_1.jj > javac parser_1.java > java parser_1 < srcprog.txt parser_1.jj parser_1.javaparser_1.class parser_1.html javacc jjdoc javac

Regulær grammatik ["a"-"z"] matcher alle lower case letters ~[] matcher alle character ~["\n","\r"]matcher alle character undtagen new line og return e1 | e2 | e3 Valg mellem e1, e2, e3 (e)+En eller flera af e (e)*Nul eller flere af e (e)?e er optional Hvor e er elementer fra alfabetet eller et token.

Regulær grammatik SKIP : {” ” | ”\r” | ”\t” | ”\n” } SPECIAL_TOKEN : /* COMMENTS: # En kommentar */ { } TOKEN : /* PRE DEF */ { | |... } TOKEN : /* SEPARATORS */ { | |...

Regulær grammatik TOKEN : { ( "." )? | "." > | )+ > | ( | |"_")* > |< #LETTER:["\u0024","\u0041"-"\u005a", "\u0061"-"\u007a","\u00c0"-"\u00d6", "\u00d8"-"\u00f6","\u00f8"-"\u00ff", "\u0100"-"\u1fff","\u3040"-"\u318f", "\u3300"-"\u337f","\u3400"-"\u3d2d", "\u4e00"-"\u9fff","\uf900"-"\ufaff” ]> | < #DIGIT:["\u0030"-"\u0039","\u0660"-"\u0669", "\u06f0"-"\u06f9","\u0966"-"\u096f", "\u09e6"-"\u09ef","\u0a66"-"\u0a6f", "\u0ae6"-"\u0aef","\u0b66"-"\u0b6f", "\u0be7"-"\u0bef","\u0c66"-"\u0c6f", "\u0ce6"-"\u0cef","\u0d66"-"\u0d6f", "\u0e50"-"\u0e59","\u0ed0"-"\u0ed9", "\u1040"-"\u1049" ]> }

Gramatiske regler void StartSymbol() : {} { (statement())* {System.out.println("Parsning slut.");} } void statement() : {} { exp() {System.out.println("Statement.");} } void exp() : {Token id;} { term() ( ( id= | id= ) term() {if (id.kind== plusT) System.out.println("term PLUS term."); if (id.kind== minusT) System.out.println("term MINUS term."); } )* }

Objektet: Token. int kind; int beginLine, beginColumn, endLine, endColumn; String image; Token next; Token parser.getNextToken() throws ParseError;

Symboltabel class SymData { public int type; public float fvalue; } static java.util.Hashtable SymTabel= new java.util.Hashtable(); public static boolean SymTlookup(Object id) { return SymTabel.containsKey((Object)id); } public static SymData SymTinsert(Object id, int type) throws ParseException { SymData sd; if (SymTabel.containsKey((Object)id)) sd=(SymData)SymTabel.get((Object)id); else { sd = new SymData(); sd.type = type; SymTabel.put((Object)id,(Object)sd); } return sd; }

Symboltabel kald void StartSymbol() : {Token id=null;} { id= (statement())* {SymTinsert(id.image, PROG); System.out.println("Parsning slut.");} } void statement() : {Token id=null;} { id= exp() {SymTinsert(id.image, FLOAT); System.out.println("Statement.");} }

Lookahead void dconstspes() : {} { LOOKAHEAD(3) | LOOKAHEAD(3) }