begreber og redskaber 1

Post on 03-Jan-2016

49 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

Begreber og Redskaber 1

SyntaksbeskrivelseOversigt

• 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

– 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

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

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)

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

Jernbanediagrammer og EBNF• Email adresser

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

navn @ navn navn.

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

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)

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

Et Java Programpublic class A

{

public static void main(String[ ] args)

{

System.out.println(”Hello”);

}

}

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

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

TypeDeclaration:ClassDeclarationInterfaceDeclaration

Vi vælger ClassDeclaration

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 }

Et Java Programpublic class A

{

public static void main(String[ ] args)

{

System.out.println(”Hello”);

}

}

ClassMemberClassMember

FieldDeclaration

ConstructorDeclaration

MethodDeclaration

ClassDeclaration

InterfaceDeclaration

static Block

Vi vælger MethodDeclaration

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

Et Java Programpublic class A

{

public static void main(String[ ] args)

{

System.out.println(”Hello”);

}

}

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)

MethodBodyMethBody:

Block”;”

Block:”{” {BlockStatement} ”}”

BlockStatement:LocalVariableDeclaration ”;”StatementClassDeclaration

Et Java Programpublic class A

{

public static void main(String[ ] args)

{

System.out.println(”Hello”);

}

}

StatementStatement:

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

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)

ExpressionExpression:

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

Vi vælger PrimaryExpression

PrimaryExpressionPrimary: Primary1 { PrimSuffix }Primary1:

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

PrimaryName:

Id { ”.” Id }PrimSuffix:

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

ArgumentsArguments:

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

Literal:

IntegerLiteral | FloatingPointLiteral | CharacterLiteral | StringLiteral | BooleanLiteral | null

StringLiteral:

””” { Character } ”””

Primary fortsatEn mulighed for PrimaryExpression er

derfor:

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

Vi vælger

System.out.println(”Hello”)

Et Java Programpublic class A

{

public static void main(String[ ] args)

{

System.out.println(”Hello”);

}

}

Afledning: SyntakstræCompilation Unit:

[PackDecl] {ImportDecl} {TypeDeclaration}

ClassDeclaration

class A { ClassBody }

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

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

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)

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

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

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.

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)

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

top related