티스토리 뷰
과제라서 하게 되었다....
내가 만들어야 하는건 사칙연산과 괄호, 정수를 지원하는 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의 종류
파이썬은 아니지만 타입 표시해야해서 어쩔수 없이 짬뽕언어로,,,,
다음과 같은 함수들도 필요하다
'PL > Programming Language' 카테고리의 다른 글
[PL][WIP] 프로그래밍 언어의 발전 (0) | 2021.12.15 |
---|---|
[PL] pass by value와 pass by reference (그리고 pass by assignment) (0) | 2021.12.08 |
[ProgrammingLanguage][WIP] Syntax(구문), Semantic(의미론) 이해하기 (0) | 2021.10.05 |
[ProgrammingLanguage] 언어 구현하기- Compilation, Pure Interpretation, Hybrid, Preprocessor (0) | 2021.09.10 |
[ProgrammingLanguage] 폰 노이만 구조, 병목 (0) | 2021.09.10 |