숭실대학교 컴퓨터학부 / 2025년 프로그래밍언어 수업 김철홍 교수님의 구현 과제입니다. 본 과제에서는 EBNF 문법을 기반으로 한 Recursive-Descent Parser 인터프리터를 구현하였습니다. 총 두 개의 구현 과제로 구성되어 있으며, 각각 Python과 C++로 작성되었습니다.
<program> → {<statement>}
<statement> → <var> = <expr> ; | print <var> ;
<expr> → <term> {+ <term> | * <term>}
<term> → <factor> {- <factor>}
<factor> → [ - ] ( <number> | <var> | ‘(’<expr>‘)’ )
<number> → <digit> {<digit>}
<digit> → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<var> → <alphabet>{<alphabet>}
<alphabet> → a | b | ... | zpython3 rd_parser1.pyg++ -o rd_parser1 rd_parser1.cpp && ./rd_parser1<program> → {<declaration>} {<statement>}
<declaration> → <type> <var> ;
<statement> → <var> = <aexpr> ;
| print <aexpr> ;
| while ( <bexpr> ) do { <statement>* } ;
| if ( <bexpr> ) { <statement>* } else { <statement>* } ;
<bexpr> → <var> <relop> <var>
<relop> → == | != | < | >
<aexpr> → <term> {( + | - ) <term>}
<term> → <factor> { * <factor>}
<factor> → [ - ] ( <number> | <var> | ‘(’<aexpr>‘)’ )
<type> → integer
<number> → <digit> {<digit>}
<digit> → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<var> → <alphabet>{<alphabet>}
<alphabet> → a | b | ... | zpython3 rd_parser2.pyg++ -o rd_parser2 rd_parser2.cpp && ./rd_parser2