2020년 2월 14일 금요일

flex와 bison으로 파서 만들기(1)

엄청 고인물스러운 도구이긴 하지만 flex와 bison으로 간단한 파서를 만드는 작업을 해 보자.
flex와 bison은 정의된 문법에 따라 텍스트 파일을 처리하는 c/c++ 코드를 생성해준다.
컴파일러 이론을 야매로 공부해서 LL(1)이니 뭐니 하는 얘기는 잘 모르겠고, 그냥 도구 사용법 정도를 익힌 상태라 남들 알려줄 정도는 아니고, 어쩌다 가끔씩 쓸 때 참고하려고 쓴다.

c/c++에서 c#으로 갈아탄지가 몇년 되다 보니 c#으로 출력하는 도구는 없을까 좀 찾아봤는데, 몇 개가 보인다. 몇 년전에는 잘 안보이더니 이번에 찾으니 많이 나오네.

1. Java
https://www.eclipse.org/Xtext/
자바쪽에서는 xtext라는 이클립스 기반의 도구가 있다. 상당히 멋지게 동작하는 것 같다. lex와 yacc 처럼 분리된 것이 아니라 xtext 파일 하나로 전부 처리하는 것 같다.

2. LLLPG
http://ecsharp.net/lllpg/2-simple-examples.html
2016년 이후 업데이트가 안된 것 같은데, 좀 약해보인다. 제목 그대로 simple lexer 정도로 보인다. 끝 부분의 질문이 마음에 든다.
Think twice: Do you really need a parser generator?
3. GOLD Builder
http://goldparser.org/builder/index.htm
2015년까지 업데이트 된 것 같은데, 확실히는 모르겠다. Windows 7까지만 나온걸 보니 그 정도에서 멈춘거 같다. 사용해보고 쓸만하면 빨리 백업을 받아놔야 할 듯.

4. Coco/R for C#
http://ssw.jku.at/Coco/#Docu
계속해서 업데이트 되는 분위기이다. nuget으로도 배포되니 괜찮은 듯 하다. C# 뿐만 아니라 Java, C++, F#, VB.Net, Delphi, Swift 등등으로 코드를 생성해준다. 적당히 쓰는 데에는 좀 공부가 필요할 것 같다.

5. ANTLER
https://www.antlr.org/
겁나 유명한 놈인거 같다. 끝판왕이랄까? 그런데 공부해야 할 내용이 좀 될 것 같다. 문법은 그래도 좀 익숙한 형태라 아주 어렵지는 않을 것 같다. 주로 툴 사용법에 대해 삽질하는 것들이 많을 것 같다.


일단 flex와 bison으로 c/c++ 파서를 한 번 만들어보고, 똑같은 것을 antler로 다시 한 번 만들어봐야 겠다.

파서는 LIN Description FIle을 처리하는 놈을 만들어보려고 한다.
사양은 다음 링크에서 받을 수 있다. 
https://www.cs-group.de/wp-content/uploads/2016/11/LIN_Specification_Package_2.2A.pdf

전체를 다 처리하는 것을 글로 쓰기에는 귀찮으니 일부만 처리하도록 해야겠다.

대략 다음과 같은 순서로 하지 않을까 싶다.

<flex & bison>
1. flex & bison 설치
2. 개발 환경 구성
[...생각 중...]

포스트 올리는 대로 링크를 업데이트하도록 하겠다.

첫 날 너무 많은 걸 하면 안된다.

댓글 없음: