initial commit
This commit is contained in:
72
2.md
Normal file
72
2.md
Normal file
@@ -0,0 +1,72 @@
|
||||
Lexical Analysis
|
||||
===
|
||||
|
||||
포트란은 모든 whitespace를 지움.
|
||||
|
||||
```fortran
|
||||
do 5 I = 1.25
|
||||
|
||||
```
|
||||
|
||||
```
|
||||
do 5 I = 1,25
|
||||
```
|
||||
|
||||
|
||||
## Tokens
|
||||
|
||||
대표적인 토큰의 예시
|
||||
|
||||
* Identifiers
|
||||
* Keywords
|
||||
* Integers
|
||||
* Floating-points
|
||||
* Symbols
|
||||
* Strings
|
||||
|
||||
하기 위해서 하는 것
|
||||
|
||||
* Specification
|
||||
|
||||
확실하게 명세를 해줘야함.
|
||||
|
||||
* Recognition
|
||||
|
||||
DFA를 이용해서 패턴 매칭
|
||||
|
||||
* Automation
|
||||
|
||||
RE로 부터 DFA를 generate해야함
|
||||
|
||||
Lex라는 툴을 이용
|
||||
|
||||
그러나 내부적으로는 Tompson's construction (RE -> NFA), Subset Construction(NFA -> DFA)도 알아야함
|
||||
|
||||
|
||||
## Specification
|
||||
|
||||
Regular Expression
|
||||
|
||||
Multiple Matches
|
||||
|
||||
`elsex = 0`이라는 코드에서
|
||||
|
||||
`else / x / = / 0`
|
||||
또는
|
||||
|
||||
`elsex / = 0` 두가지 선택지가 있음. 둘 중 하나를 무조건 골라야함. 이때 가장 긴 토큰이 선택된다.
|
||||
|
||||
* `elsex`가 `else`보다 더 길어서 `elsex`가 선택됨.
|
||||
|
||||
만약에 두 경우가 모두 똑같다면 토큰 종류의 우선순위에 따라 선택된다.
|
||||
|
||||
* `Keyword`가 `Identifier`가 더 높음.
|
||||
|
||||
## Recognition
|
||||
|
||||
FSA를 이용함.
|
||||
|
||||
DFA와 NFA의 표현력은 동일하나 DFA는 편하게 구현할 수 있다는 장점이 있음.
|
||||
NFA는 RE로부터 쉽게 변환가능하다는 장점이 있음.
|
||||
|
||||
**Lexical ANalysis**
|
||||
Reference in New Issue
Block a user