[PL][WIP] 파이썬으로 Lexical Analyzer 만들기
과제라서 하게 되었다....
내가 만들어야 하는건 사칙연산과 괄호, 정수를 지원하는 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의 종류
파이썬은 아니지만 타입 표시해야해서 어쩔수 없이 짬뽕언어로,,,,
다음과 같은 함수들도 필요하다