Presentation is loading. Please wait.

Presentation is loading. Please wait.

4장 보조자료.

Similar presentations


Presentation on theme: "4장 보조자료."— Presentation transcript:

1 4장 보조자료

2 BNF BNF uses following notations: (i) Non-terminals : < >
(ii) Rules X ::= Y (1) X : Nonterminal. (2) Y : a terminal, nonterminal, or concatenation of terminal and nonterminals (3) metasymbol : ::=, | Example: <S>::= a < S > |a Notation ε : Used to represent an empty string

3 EBNF(Extended BNF) Additional Metasymbols [ ] for optional structures
{ } for repetitive structures ( ) for grouping

4 Conversion from EBNF to BNF and Vice Versa
BNF to EBNF: (i) Look for recursion in grammar: A::= aA | a A::= a{a} (ii) Look for common string that can be factored out with grouping and options. A ::=aB |a A := a [B]

5 EBNF to BNF: (i) Option: [] (ii) Repetition: {} A::= a[B]C
A’::=aNC N::=B| ε (ii) Repetition: {} A ::=a{ B1B2... Bn}C A’::=aNC N::=B1B2...BnN| ε

6 <expr> ::= <digits> <digits> ::= <digit> | <digit><digits>

7 <expr> ::= <digit>{<digit>}

8 <expr> ::= <digits>
<digits> ::= empty | <digit><digits>

9 <expr> ::= {<digit>}

10 <id> ::= <letter> | <id><letter> | <id><digit>

11 <id> ::= <letter> {<letter> | <digit>}

12 Notes on use of EBNF Use {…} only for left recursive rules with associativity: BNF : expr → expr + term | term EBNF : expr → term {+ term } For right recursive rules use [ ... ] instead: BNF : expr => term + expr | term EBNF : expr => term [ + expr ] => left associativity

13 expr => { - } term … Do not start a rule with {…}: write
expr → term {+ term }, not expr → {term +} term exception: left { x } is OK for simple token expr => { - } term … Square brackets can be used anywhere, however: expr → expr + term | term | - term should be written as expr → [-] term {+ term }

14 EBNF Examples Repetition Optional BNF: expr → expr + term | term
EBNF: expr → term { + term } Optional BNF: if-stmt → if ( expr ) stmt | if ( expr ) stmt else stmt EBNF: if-stmt → if ( expr ) stmt [ else stmt ]

15 expr => expr + term => expr + term + term => expr + term + term + term => term term + term

16 BNF: EBNF: <expr> -> <expr> + <term>
<term> -> <term> * <factor> | <term> / <factor> | <factor> EBNF: <expr> -> <term> {(+ | -) <term>} <term> -> <factor> {(* | /) <factor>}

17 Syntax Diagram Examples
Repetition EBNF: expr → term { + term } Optional EBNF: if-stmt → if ( expr ) stmt [ else stmt ] expr term + if-stmt if ( expr ) stmt else stmt

18 모호성 제거 방법 해법1: 우선순위(precedence) 부여 해법2: 결합순서(associativity) 부여
+보다 *가 우선적으로 결합되도록 E ::= E + E | E -E | T (G2) T ::= T * T | ( E ) | N 문법(G2)는 * 5에 대해서 모호성 해결 해법2: 결합순서(associativity) 부여 E ::= E + T | E -T | T (G3) T ::= T * F | F F ::= ( E ) | N

19 <expr> -> <expr> <op> <expr> | const


Download ppt "4장 보조자료."

Similar presentations


Ads by Google