1 / 38

Begreber og Redskaber 1

Begreber og Redskaber 1. BRP. Syntaksbeskrivelse. Oversigt Formelle og naturlige sprog Syntaks, semantik, pragmatik Jernbanediagram og EBNF Genkendelse af sprog Videre perspektiv – historie, teori, resultater. Formål. Kunne læse syntaksbeskrivelse af Java

dana-sutton
Download Presentation

Begreber og Redskaber 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Begreber og Redskaber 1 BRP

  2. Syntaksbeskrivelse Oversigt • Formelle og naturlige sprog • Syntaks, semantik, pragmatik • Jernbanediagram og EBNF • Genkendelse af sprog • Videre perspektiv – historie, teori, resultater

  3. Formål • Kunne læse syntaksbeskrivelse af Java • Nyttigt redskab i en værktøjskasse • Forstå hvad en syntaksbeskrivelse er • Se om tekster er syntaktisk korrekt • Skrive syntaks ud fra eksempler • Omskrive EBNF til jernbanediagram • Give et videre perpektiv • Historie • Videnskab mellem lingvistik og matematik

  4. Sprog • Formelt vs. Naturligt sprog • Programmering sker i formelle sprog • Maskinel analyse af naturlige sprog er kompliceret aktivt forskningsfelt • Eksempler på formelle sprog • Telefonnumre • Email adresser • HTML dokumenter • Java programmer

  5. Syntaks, semantik,.. • Syntaks • Hvilke sætninger må man skrive og hvordan hænger ordene sammen i sætninger • Semantik • Hvad betyder sætningerne i sproget • Pragmatik • Hvordan bruger man sproget i praksis • Idiomer (talemåder, fast vendinger)

  6. Begreber • I Formelle sprog siger vi at • Et sprog er mængden af syntaktisk korrekte tekster i sproget • Et sprogs syntaks kan beskrives med en grammatik • Jernbanediagrammer og EBNF er eksempler på måder at angive grammatikker på • Tekster i det formelle sprog Java er altså de syntaktisk korrekte programmer

  7. Jernbanediagrammer og EBNF • Email adresser • Om EBNF navn ”@” { navn ”.” } navn ”.” navn navn @ navn . navn

  8. Notation • Terminaler: Det der skal stå direkte i tekster (f.eks. Dele af Javaprogram ) • I Jernbanediagram: • I EBNF f.ex. class • Nonterminaler: dele af tekster som forklares andetsteds i grammatikken • I Jernbanediagram • I EBNF Expression class Expression

  9. Mer notation • EBNF udtryk bruger: • [ .. ] mulighed 0-1 • { .. } gentagelse 0-flere • (.. | .. ) valgmulighed • EBNF regler har ofte formen Nonterminal: udtryk1 udtryk2 Det skal læses som: (udtryk1 | udtryk2)

  10. Fra EBNF til jernbanediagram • (Den anden vej er ikke helt så triviel) • udtryk1 udtryk2 (sammensætning) • {udtryk} (gentagelse 0-flere) • [udtryk] (mulighed 0-1) • (udtryk1 | udtryk2) (valg) udtryk1 udtryk2 udtryk udtryk udtryk1 udtryk2

  11. Et Java Program public class A { public static void main(String[ ] args) { System.out.println(”Hello”); } }

  12. Compilation Unit (Baseret på L&L – men som EBNF) Compilation Unit: [PackDecl] {ImportDecl} {TypeDeclaration} Vi vælger TypeDeclaration TypeDeclaration: ClassDeclaration InterfaceDeclaration Vi vælger ClassDeclaration

  13. Class Declaration ClassDeclaration: {Modifier} classid ClassAss ClassBody Vi vælger en Modifier: public Vi vælger: public class AClassBody ClassBody: ”{” {ClassMember} ”}” Vi tager en enkelt: { ClassMember }

  14. Et Java Program public class A { public static void main(String[ ] args) { System.out.println(”Hello”); } }

  15. ClassMember ClassMember FieldDeclaration ConstructorDeclaration MethodDeclaration ClassDeclaration InterfaceDeclaration staticBlock Vi vælger MethodDeclaration

  16. MethodDeclaration MethodDeclaration: {Modifier} (Type|void) id par thrw MethBody Modifier: public | private | protected | static | final | abstract | native | synchronized | transient | volatile Vi vælger: public static Vi vælger: void (ikke Type) og id: main

  17. Et Java Program public class A { public static void main(String[ ] args) { System.out.println(”Hello”); } }

  18. Parameters Par ”(” [ Typeid { ”,” Typeid } ] ”)” Vi vælger en enkelt med id: args Type: (PrimType | Name){ ”[” ”]” } Vi vælger: String[ ] Og får: (String[ ] args)

  19. MethodBody MethBody: Block ”;” Block: ”{” {BlockStatement} ”}” BlockStatement: LocalVariableDeclaration ”;” Statement ClassDeclaration

  20. Et Java Program public class A { public static void main(String[ ] args) { System.out.println(”Hello”); } }

  21. Statement Statement: Block | ExpressionStatement | BasicAssignment | IfStatement | SwitchStatement | WhileStatement | DoStatement | ForStatement | ReturnStatement | ThrowStatement | TryStatement | SynchronizedStatement | EmptyStatement | BreakStatement | ContinueStatement | LabeledStatement

  22. ExpressionStatement ExpressionStatement: Expression ”;” (Lige her er der et par små trykfejl i de to grammatikker: JLS har glemt ExpressionStatement, og L&L får begrænset Expression for meget)

  23. Expression Expression: PrimaryExpression | Assignment | EqualityExpression | RelationalExpression | LogicalExpression | BitwiseExpression | ConditionalExpression | InstanceExpression | CastExpression | UnaryExpression Vi vælger PrimaryExpression

  24. PrimaryExpression Primary: Primary1 { PrimSuffix } Primary1: Literal Name this super ”.” id ”(” Expression ”)” Allocation

  25. Primary Name: Id {”.” Id } PrimSuffix: ”.” Id ”.” this ”.” class ”.” Allocation ”[” Expression ”]” Arguments

  26. Arguments Arguments: ”(” [ Expression { ”,” Expression } ] ”)” Literal: IntegerLiteral | FloatingPointLiteral | CharacterLiteral | StringLiteral | BooleanLiteral | null StringLiteral: ””” { Character } ”””

  27. Primary fortsat En mulighed for PrimaryExpression er derfor: Id {”.” Id} (Expression {”,” Expression}) Vi vælger System.out.println(”Hello”)

  28. Et Java Program public class A { public static void main(String[ ] args) { System.out.println(”Hello”); } }

  29. Afledning: Syntakstræ Compilation Unit: [PackDecl] {ImportDecl} {TypeDeclaration} ClassDeclaration class A{ClassBody}

  30. EBNF • Extended Backus Naur Form • 1963: Brugt i Algol rapport (Peter Naur ed.) John Backus medforfatter. (De brugte en simplere version uden ”{” og ”}”) • Variant af Kontekst-fri grammatikker (Chomsky 1956) • Variant brugt af Panini, indisk grammatiker ca. 300 BC, til beskrivelse af Sanskrit

  31. Regulære udtryk • Regulære udtryk er en variant af EBNF hvor man kun har et udtryk og ikke mulighed for ekstra regler • Kendes fra søgninger i mange tekstbehandlingssystemer • Bruger ofte lidt andre symboler: • ( .. )* betyder gentag 0-flere gange • ( .. )+ betyder gantag 1-flere gange • ( .. )? betyder mulighed 0-1

  32. Chomsky hierarkiet • Type 0 sprog: Uindskrænkede sprog (sprog med en formel syntaks) • Type 1 sprog: Kontekst-følsomme sprog (hvad der må stå hvor i tekster afhænger af kontekst) • Type 2 sprog: Kontekst-frit sprog (sprog der kan beskrives med EBNF eller tilsv.) • Type 3 sprog: Regulære sprog (sprog der kan beskrives ved en enkelt regel i EBNF eller tilsv. Dvs. regulære udtryk)

  33. Chomsky • Noam Chomsky: lingvist og samfundsdebatør (f. 1928) • Chomsky hierarkiet er fra 1956 og primært tænkt til beskrivelse af naturlige sprog (vha transformationsgrammatikker..)

  34. Et par resultater • Sproget: ”ab”,”aabb”,”aaabbb”,... er kontekstfrit men ikke regulært. • Sproget: ”abc”,”aabbcc”,”aaabbbccc”,.. er ikke kontekstfrit men kontekstafhængigt. Sprog1: ab aSprog1b

  35. Et par resultater • Der findes ingen generelle teknikker til at undersøge om to EBNF’er beskriver samme sprog (Det kan bevises at en sådan teknik heller ikke kan findes!) • En sådan teknik findes for regulære udtryk.

  36. Hvad kan det bruges til? • Regulære udtryk → søgninger i store datamængder • Genkendelse kan klares af endelige automater (uden hukommelse) • Kontekst fri sprog → oversættere • Genkendelse kræver hukommelse • Særligt effektive genkendere findes for klasser af kontekst-fri grammatikker (LL(1), LALR(1),..) • De kan konstrueres automatisk ud fra grammatikken (YACC, Bison, Antlr)

  37. Afrunding • EBNF og Jernbanediagrammer er redskaber til at beskrive tekster i formelle sprog • Undersøge om en given tekst hører til sproget: Genkendelse, afledning • Afklare hvad der er korrekt Java

More Related