38
Begreber og Redskaber 1

Begreber og Redskaber 1

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Begreber og Redskaber 1

Begreber og Redskaber 1

Page 2: Begreber og Redskaber 1

SyntaksbeskrivelseOversigt

• Formelle og naturlige sprog

• Syntaks, semantik, pragmatik

• Jernbanediagram og EBNF

• Genkendelse af sprog

• Videre perspektiv – historie, teori, resultater

Page 3: Begreber og Redskaber 1

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

Page 4: Begreber og Redskaber 1

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

Page 5: Begreber og Redskaber 1

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)

Page 6: Begreber og Redskaber 1

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

Page 7: Begreber og Redskaber 1

Jernbanediagrammer og EBNF• Email adresser

• Om EBNFnavn ”@” { navn ”.” } navn ”.” navn

navn @ navn navn.

Page 8: Begreber og Redskaber 1

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

Expression

class

Page 9: Begreber og Redskaber 1

Mer notation• EBNF udtryk bruger:

– [ .. ] mulighed 0-1– { .. } gentagelse 0-flere– (.. | .. ) valgmulighed

• EBNF regler har ofte formenNonterminal:

udtryk1udtryk2

Det skal læses som: (udtryk1 | udtryk2)

Page 10: Begreber og Redskaber 1

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

udtryk1udtryk2

Page 11: Begreber og Redskaber 1

Et Java Programpublic class A

{

public static void main(String[ ] args)

{

System.out.println(”Hello”);

}

}

Page 12: Begreber og Redskaber 1

Compilation Unit(Baseret på L&L – men som EBNF)Compilation Unit:

[PackDecl] {ImportDecl} {TypeDeclaration}Vi vælger TypeDeclaration

TypeDeclaration:ClassDeclarationInterfaceDeclaration

Vi vælger ClassDeclaration

Page 13: Begreber og Redskaber 1

Class DeclarationClassDeclaration:

{Modifier} class id ClassAss ClassBody

Vi vælger en Modifier: public

Vi vælger: public class A ClassBody

ClassBody:

”{” {ClassMember} ”}”

Vi tager en enkelt: { ClassMember }

Page 14: Begreber og Redskaber 1

Et Java Programpublic class A

{

public static void main(String[ ] args)

{

System.out.println(”Hello”);

}

}

Page 15: Begreber og Redskaber 1

ClassMemberClassMember

FieldDeclaration

ConstructorDeclaration

MethodDeclaration

ClassDeclaration

InterfaceDeclaration

static Block

Vi vælger MethodDeclaration

Page 16: Begreber og Redskaber 1

MethodDeclarationMethodDeclaration: {Modifier} (Type|void) id par thrw MethBody

Modifier: public | private | protected | static | final |

abstract | native | synchronized | transient | volatile

Vi vælger: public staticVi vælger: void (ikke Type) og id: main

Page 17: Begreber og Redskaber 1

Et Java Programpublic class A

{

public static void main(String[ ] args)

{

System.out.println(”Hello”);

}

}

Page 18: Begreber og Redskaber 1

ParametersPar

”(” [ Type id { ”,” Type id } ] ”)”

Vi vælger en enkelt med id: args

Type:

(PrimType | Name) { ”[” ”]” }

Vi vælger: String[ ]

Og får: (String[ ] args)

Page 19: Begreber og Redskaber 1

MethodBodyMethBody:

Block”;”

Block:”{” {BlockStatement} ”}”

BlockStatement:LocalVariableDeclaration ”;”StatementClassDeclaration

Page 20: Begreber og Redskaber 1

Et Java Programpublic class A

{

public static void main(String[ ] args)

{

System.out.println(”Hello”);

}

}

Page 21: Begreber og Redskaber 1

StatementStatement:

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

Page 22: Begreber og Redskaber 1

ExpressionStatementExpressionStatement:

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)

Page 23: Begreber og Redskaber 1

ExpressionExpression:

PrimaryExpression | Assignment | EqualityExpression | RelationalExpression | LogicalExpression | BitwiseExpression | ConditionalExpression | InstanceExpression | CastExpression | UnaryExpression

Vi vælger PrimaryExpression

Page 24: Begreber og Redskaber 1

PrimaryExpressionPrimary: Primary1 { PrimSuffix }Primary1:

LiteralNamethissuper ”.” id”(” Expression ”)”Allocation

Page 25: Begreber og Redskaber 1

PrimaryName:

Id { ”.” Id }PrimSuffix:

”.” Id”.” this”.” class”.” Allocation”[” Expression ”]”Arguments

Page 26: Begreber og Redskaber 1

ArgumentsArguments:

”(” [ Expression { ”,” Expression } ] ”)”

Literal:

IntegerLiteral | FloatingPointLiteral | CharacterLiteral | StringLiteral | BooleanLiteral | null

StringLiteral:

””” { Character } ”””

Page 27: Begreber og Redskaber 1

Primary fortsatEn mulighed for PrimaryExpression er

derfor:

Id {”.” Id} (Expression {”,” Expression})

Vi vælger

System.out.println(”Hello”)

Page 28: Begreber og Redskaber 1

Et Java Programpublic class A

{

public static void main(String[ ] args)

{

System.out.println(”Hello”);

}

}

Page 29: Begreber og Redskaber 1

Afledning: SyntakstræCompilation Unit:

[PackDecl] {ImportDecl} {TypeDeclaration}

ClassDeclaration

class A { ClassBody }

Page 30: Begreber og Redskaber 1
Page 31: Begreber og Redskaber 1

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

Page 32: Begreber og Redskaber 1

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

Page 33: Begreber og Redskaber 1

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)

Page 34: Begreber og Redskaber 1

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

Page 35: Begreber og Redskaber 1

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

a Sprog1 b

Page 36: Begreber og Redskaber 1

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.

Page 37: Begreber og Redskaber 1

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)

Page 38: Begreber og Redskaber 1

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