티스토리 뷰

과제라서 하게 되었다....

내가 만들어야 하는건 사칙연산과 괄호, 정수를 지원하는 lexical analyzer였다. 

그림에서 보이다싶이 lexical analyzer는 입력받은 코드를, syntax analyzer ( parser)에게 lexical unit으로 쪼개서 전달해야 한다. 

그리고 symbol table을 만들어야 한다. 

 

물론 모든 문법을 지원하면 좋겠지만 내가 만든 Lexical analyzer에서 지원해야 문법은 다음과 같았다. 

 

 

<program> → <statements>
<statements>→ <statement> | <statement><semi_colon><statements> <statement> → <ident><assignment_op><expression>
<expression> → <term><term_tail>
<term_tail> → <add_op><term><term_tail> | ε
<term> → <factor> <factor_tail>
<factor_tail> → <mult_op><factor><factor_tail> | ε
<factor> → <left_paren><expression><right_paren> | <ident> | <const> <const> → any decimal numbers
<ident> → any names conforming to C identifier rules <assignment_op> → :=
<semi_colon> → ;
<add_operator> → + | -
<mult_operator> → * | /
<left_paren> → (
<right_paren> → )

 

 

예를 들어 보자!

operand1 := 3 ; 

이라는 코드가 들어온다면, 

 

output의 형식은 다음과 같다. 

<IDENT, operation1> <ASSIGN_OP, :=> <INT_LIT, 3> <SEMICOLON, ;>

 

사람은 코드를 보고 쉽게 쪼개줄 수 있지만 한글자씩 파악해야 하는 코드 입장에서는 쪼개지는 것이 쉽지가 않다..

그래도 해보면

 

다음과 같은 변수들이 필요하다.

int charClass # 글자의 종류: LETTER, DIGIT, UNKNOWN
char lexeme[100] # 이따가 프린트 할 어절
char nextChar # 바로 다음 글자
int nextToken # nextChar의 종류

파이썬은 아니지만 타입 표시해야해서 어쩔수 없이 짬뽕언어로,,,,

 

 

다음과 같은 함수들도 필요하다

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함