ARCHIVES

Flex의 start condition

(주)비트나인 2016. 3. 21. 09:38



이번 포스팅에서는 flex의 start condition에 대해 알아보는 시간을 갖도록 하겠습니다.


보통 `"`로 감싼 문자열이나 `/*``*/`로 감싼 주석은 하나의 토큰으로 인식하도록 규칙을 만듭니다. 그런데 해당 문자열 혹은 주석의 내용에, 문자열을 끝내는 `"`문자나 다른 토큰의 규칙과 부합하는 텍스트가 있을 경우 난감해집니다. 이와 같은 경우 start condition을 사용해서 문제를 해결할 수 있습니다.


예를 들어 `"int"`와 같은 문자열을 분석할 경우, `int`가 키워드라면 해당 내용이 하나의 토큰으로 인식될 수 있습니다. 이와 같은 상황을 방지하기 위해 특정 상황(start condition)에서 특정 규칙들만 적용할 수 있도록 분석기 안에 작은 분석기를 만들 수 있도록 합니다.


아래의 예제는 start condition을 사용하여 `"`로 감싼 문자열을 인식하는 규칙들을 보여줍니다.



먼저 `d`라는 start condition을 하나 만들고, `"`문자를 처음 만나면 `d` 상태로 진입합니다. 이 상태에서는 `<d>`로 시작하는 규칙들만 활성화 됩니다. 그러므로 `"`를 제외한 모든 문자는 하나의 문자열에 저장되며, 연속된 두 개의 `"`문자는 하나의 `"`로 저장하게 됩니다. 마지막으로 `"`를 다시 만나면, `<d>` 상태를 해지하고 초기 상태(INITIAL)로 돌아갑니다.


이와 같이 분석 도중 일부 특정 상황에서 일부 규칙들만 활성화 할 수 있는 방법을 제공하여 분석기 안에 작은 분석기를 만들고, 분석기를 만드는 사람이 좀 더 편하게 분석기를 만들 수 있도록 합니다.




참고


Flex manual - 10 Start Conditions






Posted by Bitnine(비트나인)