Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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

Lignende præsentationer


Præsentationer af emnet: "JavaCC Top-down (Recursive descent). Mest populære mht Java. Regulær grammatik og Context-free grammatik i en fil. Tillader EBNF: (..)*, (..)+ og (..)?"— Præsentationens transcript:

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

2 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

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

4 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”));

5 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

6 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.

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

8 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" ]> }

9 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."); } )* }

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

11 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; }

12 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.");} }

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


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

Lignende præsentationer


Annoncer fra Google