나는 Ruby에서 다음 프로젝트로 작은 인터프리터를 작성하기로 결정했습니다. 성공을 위해 필요한 지식/기술은 무엇입니까?
아직 해석 할 언어를 결정하지는 않았지만 장난감 언어가 아닌 뭔가를 찾고 있는데 통역사를 작성하기가 상대적으로 쉽습니다. 미리 감사드립니다. 통역관 작성 방법은 무엇입니까?
답변
당신은 배워야 할 것입니다 적어도 :
- 어휘 분석 데이터의 프로그램 구조를 나타내는 구문 분석
- (그룹화 구조로 함께 토큰)
- 추상 구문 트리 ((토큰에 문자를 그룹화) 구조)
- 데이터 표현 (언어에 변수가 있다고 가정)
- 프로그램을 실행하는 평가 루프
일부 주제에 대한 훌륭한 소개는 소개 문구 Structure and Interpretation of Computer Programs에서 찾을 수 있습니다. 이 책에서 사용 된 언어는 첫 번째 인터프리터 구현에 이상적이며 강력하고 잘 지정된 언어 인 Scheme입니다. 추천.
위대한 답변을 주셔서 감사합니다. 단지 궁금해서, 간단한 통역사를 완성하는데 얼마나 걸릴 것이라고 생각하십니까? – bennybdbc
그 질문에 대한 답은 많은 요소들에 달려 있는데, 가장 중요한 것은 (a) 구현하는 사람의 경험 수준, (b) 해석 할 언어의 선택. 또한 아마도 (c) 구현 언어의 선택. 총체적인 대략적인 추측으로, 기술을 배우는 중급 프로그래머에게는 2 주간의 헌신적 인 연구가 필요할 수 있습니다. –
너무 열심히하지 않습니다. 여기에 LISP interpreter in ruby이고 소스가 너무 작아서 복사/붙여 넣기를해야합니다. LISP를 지금 배울 건가요? hehe.
은 아직 해석하는 언어에 결정하지 않은,하지만 난 장난감 언어가 아닙니다 뭔가를 찾고 있어요,하지만에 대한 통역을 쓸 상대적으로 쉬울 것이다. 미리 감사드립니다.
Scheme 또는 Clojure와 같은 Lisp의 방언을 사용해보십시오. (이제 Clojure와 Ruby를 통합 한 Clojure-in-Ruby가 Clojure와 Java에서 함께 사용됩니다.)
Lisp을 사용하면 Lisp의 구문이 훨씬 더 가깝기 때문에 구문의 특이성을 고집하지 않아도됩니다. 추상 구문 트리
Clorure는 스쿠비 두 (Scooby Doo)와 같은 언어로 들립니다. – FMc
완료되었습니다 http://www.springerlink.com/content/q3n77q7172831288/ 및 http://onestepback.org/index.cgi/Tech/Ruby/LispInRuby.red –
This SICP chapter은 Lisp (메타 문자 평가 기)에서 Lisp 인터프리터를 작성하는 방법을 보여줍니다. 제 의견으로는 이것이 가장 좋은 곳입니다. 그런 다음 Lisp in Small Pieces으로 이동하여 Lisp 용 고급 인터프리터와 컴파일러를 작성하는 방법을 배울 수 있습니다. Lisp과 같은 언어를 구현하면 (Lisp 자체에서) 어휘 분석기, 구문 분석기, AST, 데이터/프로그램 표현 및 REPL을 무료로 얻을 수 있다는 장점이 있습니다. 당신은 당신의 훌륭한 언어를 작동시키는 데 집중할 수 있습니다!
당신이 내가 며칠 전에 비슷한 생각을했다 루비 초안 사양 http://ruby-std.netlab.jp/
을 체크 아웃 할 수 있습니다 위해 나무 위에 프로젝트 느릅 나무가 도움이 될 수있다. 구문이 매우 간단하고 언어가 조작하는 데이터 구조가 코드가 작성된 구조와 동일하므로 LISP를 구현하는 것이 가장 쉽습니다. 따라서 최소한의 구현 만하면되며 나머지는 그 자체.
그러나 구문 분석에 대해 배우려는 경우 추상 구문 트리 등으로보다 복잡한 언어를 사용하고자 할 수 있습니다.
Java (사실상 이틀이 지난) Java 구현을 확인하려면 mylisp.googlecode.com을 확인하십시오. 나는 여전히 그것에 대해 연구 중이다. 그러나 기존의 것들을 작동시키는 데 얼마나 짧은 시간이 걸렸는 지 믿을 수 없다.
나는이 책을 추천 할 수있다. 그것은 쓰기 파서 및 통역 등을 위해 패턴을 설명합니다
당신이 당신 자신, 간단한 언어를 구성하고 단지 그것을 시도, 재미를 위해이 일을하는 경우. 내 추천은 정말 간단한 클래식 BASIC (비주얼 베이직이나 객체 지향적 인 것)이 아닌 것입니다. 줄 번호, GOTO, INPUT 및 PRINT를 사용하면됩니다. 당신은 기본을 다룰 수 있고, 어떻게 일을하는지 더 잘 이해할 수 있습니다.
지식이 필요하십니까?
- 토큰 화
- 파싱 ('말'로 그것을 분할 효율적으로,보다 효율적으로 읽을 수있는 무언가로 문자의 거대한 덩어리를 회전) (토큰을 통해 가고 그것에서 데이터 구조 구축)
- 해석을 (데이터 구조를 반복하고 각 명령을 실행)
그리고 마지막으로 변수를 유지할 방법이 필요합니다. 보통은 "스택"을 구현할 것입니다. 하나의 거대한 데이터 블록은 마지막에 영역을 표시 할 수 있습니다.
그것은 리스프에 구현되지 ,하지만 (I 48 시간 후 마무리 근처에 어디하지 않았지만, YMMV) 나는 하스켈 함께 시작하는 동안 나는 매우 유용한 문서로 Write Yourself A Scheme in 48 Hours을 발견했다. 또한 통역사에 대한 많은 통찰력을 제공합니다.
huh? 언어를 결정하지 않으면 어떻게 알 수 있습니까? 라이브러리를 사용하더라도 해석하기가 아주 간단 할 수도 있습니다 ... –
나는 Lisp에서 Ruby 인터프리터를 쓰는 것이 훨씬 쉽다고 생각합니다. – Svante
Svante, 나는 그렇게 확신하지 않습니다. –