2010-03-10 6 views
3

언어 통역사가 어떻게 작동하는지 이해하려고합니다. 너희들이 내게 통역이 어떻게 작동하는지에 대한 일반적인 이야기를 할 수 있니?언어 통역사 만들기

내 말은

, 나는이

10 x = 200; 
20 for r = x to 1000 step 1 
25 z = r + 32; 
30 print z; 
40 next r; 
50 end; 

그런 일을 실행할 수있는 인터프리터를 구축하는 가장 좋은 방법은 무엇처럼 쓴 몇 줄이 있다고 가정?

허용되는 모든 기능을 포함하는 큰 매트릭스가 있고 일치하는 항목이 있습니까? 예를 들어 첫 번째 줄은 변수 x에 200을 지정하지만 존재하지 않는 기호입니다.

너희들이 내게 방향을 줄 수 있다면 ...

어떤 도움을 주셔서 감사합니다.

+2

그 이유로 인해 인터프리터 (또는 컴파일러)를 작성하는 것은 정말 복잡합니다. 저는이 주제에 대해 전문가가 아니지만 대학에서 컴파일러 기술이라는 코스를 갖고 있으며 몇몇 친구들이 그 과정에 참석합니다.올바르게 기억한다면 4 단계로 구성되어 있습니다. 먼저 코드 패턴을 작성한 다음 (예 : 이미 가지고있는 것처럼) 프로그램을 사용하여 패턴을 찾고 패턴을 찾고 트리를 구성하는 데 사용할 수있는 토큰을 작성합니다 코드의 그런 다음 컴파일러를 빌드합니다. 내가 그것에 관해 많이 알지는 못했지만, 나는 그것이 쉽지 않다는 말을 들었다. – Alxandr

+0

감사합니다. 나는 일반적인 생각을 얻으려고 노력하고있다. – SpaceDog

+1

컴파일러 및 인터프리터 리소스에 대한 표준 질문은 http://stackoverflow.com/questions/1669/learning-to-write-a-compiler입니다. Crenshaw 튜토리얼과 같이 거기에 나열된 리소스가 매우 간단합니다. – dmckee

답변

3

컴파일러 작성이 복잡한 주제 (통역 특별한 컴파일러로 볼 수있다)이다이 도움이 있습니다.

구문을 이해하고 내부 표현 (추상 ​​구문 트리)을 만든 다음 실행 논리를 만들어야합니다.

Wikpediahttp://mcs.une.edu.au/~comp319/

+0

감사합니다 !!!!!!!!!! – SpaceDog

+0

AST는 확실히 풀 서비스 컴파일러 나 인터프리터로가는 길이지만 필수 사항은 아닙니다. – dmckee

+0

바로 AST는 필요 없지만 적어도 현재의 라인/문장에 대해서는 약간의 이해가 필요합니다. – johannes

1

lex/flexyacc/bison 같은 도구에 대해 알아 제안합니다. 이것들은 오픈 소프트웨어 세계에서 컴파일러를 만드는 가장 보편적 인 도구입니다. 많은 잘 알려진 오픈 소스 프로그램이 PHP, gcc, doxygen을 포함하여 작성되었습니다. 많은 무료 서적과 자습서를 찾을 수 있습니다. 그들은 lex 및 yacc 도구를 사용하는 방법을 보여줄뿐만 아니라 컴파일러의 일반적인 아이디어도 설명합니다.

+1

ANTLR (http://www.antlr.org/)은 lex 또는 bison보다 정교하지만 관련성이 높은 것을 잊지 마십시오. – mjv

+0

예 ANTLR을 언급 할 가치가 있습니다. – doc

+0

렉스/yacc는 초보자가 훨씬 편하다고 생각합니다. shift-reduce 구문 분석은 약간 이해하기 쉽습니다. OP가 배우기를 원하므로 lex/yacc가 그 목적을 위해 훨씬 더 좋습니다. 나는 둘 다 사용했고 lex/yacc는 초보자로서 훨씬 낫다는 것을 알았다. – rmk

1

나는 이것에 대해서도 더 알고 싶습니다. Douglas Crockford의 JavaScript parser이 흥미 롭다는 것을 알았지 만, 그는 언어를 파싱하기 위해 일반적으로 사용되는 것과 다른 방법을 사용하고 있습니다. 해석과 컴파일을위한 전체 그림이 아니지만 실제로 구문 분석을 구현하고 결과로 코드를 재구성하는 것이 도움이된다는 것을 알았습니다.

1

오픈 소스 'Gold Parsing System'은 http://goldparser.org입니다. :)

사이트의 일부 설명 된 개념이 있으며 여기에서 프로세스의 기초적인 기초를 배울 수 있습니다.

1

나는 이것이 오래된 스레드라는 것을 알고 있지만 대부분의 관련 질문은 중복되거나 닫힌 것으로 표시되어 있습니다. 그래서 여기에 두 개의 센트가 있습니다.

아무도 언급하지 않은 사람은 xtext입니다. Eclipse pluginIntelliJ plugin으로 사용할 수 있습니다. ANTLR과 같은 파서뿐만 아니라 DSL에 필요한 전체 파이프 라인 (파서, 링커, 유형 검사기, 컴파일러 포함)을 제공합니다. 인터프리터/컴파일러의 작동 방식을 이해하기 위해 Github의 소스 코드를 확인할 수 있습니다.