예를 들어 오토마타로 C의 변수를 인식하는걸 표현하면..
<id>=><letter><rest> <rest>=><letter><rest> | <digit><rest>| NULL <letter>=>a|b|c|...|Z <digit>=>0|1|2|....|9
이걸 프로그래밍으로 구현을 하려면 어떤식으로 해야 할까요.. 그냥 입력된 문자열을 하나하나 if/else로 비교해나가기만 하면 되나요?
예로드신 코드는 오토마타가 아니라 문법입니다.
문법을 파싱하기 위해서는 일일이 if/else 등으로 판별하는 방법도 있지만,
그건 코드를 유지하기가 너무 힘들어지니까, 렉서, 파서를 사용합니다.
리눅스에서는 flex/bison 을 사용하실 수 있지요. 컴파일러관련 책이나 오토마타 관련 책을 보셔도 많은 내용이 있습니다.
언제나 삽질 - http://tisphie.net/typo/ 프로그래밍 언어 개발 - http://langdev.net
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
예로드신 코드는 오토마타가 아니라 문법입니다.문법을 파싱하기 위해
예로드신 코드는 오토마타가 아니라 문법입니다.
문법을 파싱하기 위해서는 일일이 if/else 등으로 판별하는 방법도 있지만,
그건 코드를 유지하기가 너무 힘들어지니까, 렉서, 파서를 사용합니다.
리눅스에서는 flex/bison 을 사용하실 수 있지요. 컴파일러관련 책이나 오토마타 관련 책을 보셔도 많은 내용이 있습니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
댓글 달기