Microsoft MVP성태의 닷넷 이야기
.NET Framework: 551. 인터프리터 어휘 분석 프로그램 - C# 예제 [링크 복사], [링크+제목 복사],
조회: 23875
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)

인터프리터 어휘 분석 프로그램 - C# 예제

요즘 이런 ^^ 책을 읽고 있습니다.

만들면서 배우는 인터프리터: 컴파일러 이론으로 만드는 나만의 스크립트 언어 
; http://www.yes24.com/24/goods/7858784?scode=032

책도 얇고 전반적인 개념과 함께 코드를 부분적으로 곁들여 설명하고 있기 때문에 한번쯤 편안하게 읽어보시는 것도 좋을 것 같습니다.

당연히 코드를 입력해가면서 실습도 병행하고 있는데요. C++로 하지 않고 C#으로 실습을 하고 있기 때문에 변환해 둔 것을 공유하는 것이 좋겠다 싶어 제 블로그에 올려둘 예정입니다.

전체적으로 보니까, 동작하는 소스코드가 중간에 3개 정도 있고 마지막에 전체 소스 코드를 실어놓은 형식이라서 아마 앞으로도 3번 정도는 올리게 될 것 같습니다. 혹시나 C#으로 간단한 인터프리터 공부하실 분들이라면 위의 책을 구매하시고 제 소스 코드를 함께 보시면 도움이 되실 듯 합니다.

오늘은 그 첫번째로 "3.6.5 어휘 분석 프로그램"의 67페이지에 포함된 token_p.cpp 파일을 C# 버전으로 작성한 것을 공유합니다. ^^

실행하면 다음의 입력을,

if dt<=100
    dt = (a+200) * b
else
    dt=300
end

print "dt=", dt

파싱해서 다음과 같은 출력 결과를 얻습니다.

          if           16 = If                    0
          dt           20 = Ident                 0
          <=           13 = LessEq                0
                       21 = IntNum              100
          dt           20 = Ident                 0
           =            7 = Assign                0
           (            1 = Lparen                0
           a           20 = Ident                 0
           +            3 = Plus                  0
                       21 = IntNum              200
           )            2 = Rparen                0
           *            5 = Multi                 0
           b           20 = Ident                 0
        else           17 = Else                  0
          dt           20 = Ident                 0
           =            7 = Assign                0
                       21 = IntNum              300
         end           18 = End                   0
       print           19 = Print                 0
         dt=           22 = String                0
           ,            8 = Comma                 0
          dt           20 = Ident                 0
                       25 = EofToken              0

(첨부한 파일은 소스 코드입니다.)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 2/23/2016]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 31  32  33  34  35  [36]  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
13134정성태10/4/202215265오류 유형: 820. There is a problem with AMD Radeon RX 5600 XT device. For more information, search for 'graphics device driver error code 31'
13133정성태10/4/202217702Windows: 211. Windows - (commit이 아닌) reserved 메모리 사용량 확인 방법 [1]
13132정성태10/3/202217438스크립트: 42. 파이썬 - latexify-py 패키지 소개 - 함수를 mathjax 식으로 표현
13131정성태10/3/202221475.NET Framework: 2052. C# - Windows Forms의 데이터 바인딩 지원(DataBinding, DataSource) [2]파일 다운로드1
13130정성태9/28/202217958.NET Framework: 2051. .NET Core/5+ - 에러 로깅을 위한 Middleware가 동작하지 않는 경우파일 다운로드1
13129정성태9/27/202218639.NET Framework: 2050. .NET Core를 IIS에서 호스팅하는 경우 .NET Framework CLR이 함께 로드되는 환경
13128정성태9/23/202221658C/C++: 158. Visual C++ - IDL 구문 중 "unsigned long"을 인식하지 못하는 #import [1]파일 다운로드1
13127정성태9/22/202219602Windows: 210. WSL에 systemd 도입
13126정성태9/15/202219721.NET Framework: 2049. C# 11 - 정적 메서드에 대한 delegate 처리 시 cache 적용
13125정성태9/14/202219994.NET Framework: 2048. C# 11 - 구조체 필드의 자동 초기화(auto-default structs)
13124정성태9/13/202220584.NET Framework: 2047. Golang, Python, C#에서의 CRC32 사용
13123정성태9/8/202220480.NET Framework: 2046. C# 11 - 멤버(속성/필드)에 지정할 수 있는 required 예약어 추가
13122정성태8/26/202221380.NET Framework: 2045. C# 11 - 메서드 매개 변수에 대한 nameof 지원
13121정성태8/23/202215263C/C++: 157. Golang - 구조체의 slice 필드를 Reflection을 이용해 변경하는 방법
13120정성태8/19/202220901Windows: 209. Windows NT Service에서 UI를 다루는 방법 [3]
13119정성태8/18/202220472.NET Framework: 2044. .NET Core/5+ 프로젝트에서 참조 DLL이 보관된 공통 디렉터리를 지정하는 방법
13118정성태8/18/202216056.NET Framework: 2043. WPF Color의 기본 색 영역은 (sRGB가 아닌) scRGB [2]
13117정성태8/17/202221199.NET Framework: 2042. C# 11 - 파일 범위 내에서 유효한 타입 정의 (File-local types)파일 다운로드1
13116정성태8/4/202221573.NET Framework: 2041. C# - Socket.Close 시 Socket.Receive 메서드에서 예외가 발생하는 문제파일 다운로드1
13115정성태8/3/202222502.NET Framework: 2040. C# - ValueTask와 Task의 성능 비교 [1]파일 다운로드1
13114정성태8/2/202222279.NET Framework: 2039. C# - Task와 비교해 본 ValueTask 사용법파일 다운로드1
13113정성태7/31/202221997.NET Framework: 2038. C# 11 - Span 타입에 대한 패턴 매칭 (Pattern matching on ReadOnlySpan<char>)
13112정성태7/30/202223308.NET Framework: 2037. C# 11 - 목록 패턴(List patterns) [1]파일 다운로드1
13111정성태7/29/202222658.NET Framework: 2036. C# 11 - IntPtr/UIntPtr과 nint/nuint의 통합파일 다운로드1
13110정성태7/27/202220722.NET Framework: 2035. C# 11 - 새로운 연산자 ">>>" (Unsigned Right Shift)파일 다운로드1
13109정성태7/27/202223289VS.NET IDE: 177. 비주얼 스튜디오 2022를 이용한 (소스 코드가 없는) 닷넷 모듈 디버깅 - "외부 원본(External Sources)" [1]
... 31  32  33  34  35  [36]  37  38  39  40  41  42  43  44  45  ...