Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.