Download presentation
Presentation is loading. Please wait.
1
3장 (2) 구문과 의미론 순천향대학교 컴퓨터공학과 하상호
2
목차 구문 BNF 표기법 문법과 유도 파스 트리 모호성 연산자 우선순위 확장된 BNF
3
연산자 우선순위 다음 문법에서 연산자 우선순위는?
<expr> <expr> <op> <expr> | const <op> / | - <expr> <expr> - <term> | <term> <term> <term> / const| const
4
연산자 우선순위 문법 상에 연산자 우선순위를 부여
파스 트리의 낮은 위치의 연산자가 높은 위치의 연산자보다 높은 우선순위를 갖는다. 이와 같이 파스 트리상에 연산자 우선순위가 표현되게 하는 문법을 작성하여 모호성을 제거할 수 있다.
5
예제 다음 문법 G는 모호한가? “A = B + C * A”의 문장을 생각하라. 문법 G3
<assign> <id> = <expr> <id> A | B |C <expr> <expr> + <expr> | <expr> * <expr> | (<expr>) | <id>
6
연산자 우선순위 다음 문법에서 연산자의 우선순위는?: =, +, *, ()
<assign> <id> = <expr> <id> A | B |C <expr> <expr> + <expr> | <expr> * <expr> | (<expr>) | <id>
7
예제: 연산자 우선순위 다음에서 연산 우선순위가 다음과 같이 되게 문법을 수정하라:
‘=‘ < ‘+’ < ‘*’ < () Hint: 새로운 논터미널을 도입하라. <assign> <id> = <expr> <id> A | B |C <expr> <expr> + <expr> | <expr> * <expr> | (<expr>) | <id>
8
예제: 연산자 우선순위 다음 문법은 모호한가? “A = A + B*C”, “A = A*B+C”에 대한 파스 트리를 그려라,
<assign> <id> = <expr> <id> A | B |C <expr> <expr> + <term> | <term> <term> <term> * <fact> | <fact> <fact> (<expr>)| <id>
9
연산자 결합규칙 다음 문법은 모호한가? 연산자 결합규칙도 문법상에 표현할 수 있다.
<expr> -> <expr> + <expr> | const <expr> -> <expr> + const | const 연산자 결합규칙도 문법상에 표현할 수 있다.
10
연산자 결합규칙 규칙에서 LHS가 RHS의 처음에 오면, 그 규칙은 좌 순환적(left recursive)이라 한다.
규칙에서 LHS가 RHS의 맨 끝에 오면, 그 규칙은 우 순환적(right recursive)이라 한다. 좌 순환 규칙은 좌결합 법칙을 명세하고, 우 순환 규칙은 우결합 법칙을 명세한다. Ex. 다음 문법에서 각 연산자의 결합규칙은? <assign> <id> = <expr> <id> A | B |C <expr> <expr> + <term> | <term> <term> <term> * <fact> | <fact> <factor> <exp> ** <factor> | <exp> <exp> (<expr>)| <id>
11
If-then-else 문법 다음 문법은 모호한가? <stmt> -> <if-stmt> | …
<if-stmt> -> if <logic_expr> then <stmt> | if <logic_expr> then <stmt> else <stmt> * 다음 문장을 고려하라: if <logic_expr> then if <logic_expr> then <stmt> else<stmt>
12
문제 다음 문법에 대해서 답하라. 연산자 우선순위는? 연산자 결합법칙은?
우선순위가 +, *보다 높은 단항 연산자 –를 추가하라. <assign> <id> = <expr> <id> A | B |C <expr> <expr> + <term> | <term> <term> <term> * <fact> | <fact> <fact> (<expr>)| <id>
13
확장 BNF(EBNF)
14
예제: EBNF 다음 BNF를 EBNF로 나타내라.
<expr> <expr> + <term> | <expr> - <term> | <term> <term> <term> * <factor> | <term> / <factor> | <factor>
15
예제: EBNF 다음 BNF를 EBNF로 표현하라.
<assign> <id> = <expr> <id> A | B |C <expr> <expr> + <term> | <expr> - <term> | <term> <term> <term> * <factor> | <term> / <factor> | <factor> <factor> <exp> ** <factor> | <exp> <exp> (<expr>) | <id>
16
BNF, EBNF의 최근 변경사항 구분 최근 변경사항 => : 선택사항 표현 [] 아랫첨자 opt 사용
Ex. proc name(parameterListopt) 다중선택표현 () “one of” 사용 Ex. Operator one of + * - / < > 수직바 ‘|’ 각 RHS를 단순히 별도의 줄에 표현 Example: in C statement: for( expr-1opt ; expr-2opt; expr-3opt) statement if (expression) statement while (expression) statement …
17
Test 문제#1 다음에서 L(G)에 속하는 것은? bbaabb bbaba bbaaaabb Abaabb G:
<S> <A> a <B> b <A> <A> b | b <B> a<B> | a
18
Test 문제#1 L(G) = ? Note: Given G = (∑, N, T, S, P),
<S> <A> a <B> b <A> <A> b | b <B> a<B> | a Note: Given G = (∑, N, T, S, P), L(G) = {s | S =>* s} where s ∈ ∑*
19
퀴즈#3 예고(4/4) 범위: 3장
20
보고서 #4 (제출 일시: 4/15) 3장 연습문제 2: C의 switch 문에 대한 BNF와 EBNF를 각각 작성하라.
7: d) 8 9 13
Similar presentations