2017-01-21 16 views
0

저는 인터넷을 통해 간단한 계산기 인터프리터에서 함수를 정의하고 호출하는 방법에 대한 이해하기 쉬운 예를 찾고 있습니다. 어쩌면 내가 해답을 찾았지만 YACC에 익숙하지 않아서 그것을 볼 수 없었습니다.간단한 계산기에 사용자 정의 함수 추가하기 YACC

그래서 사용자 정의 함수에 대한 기호 테이블을 설정하고 이러한 함수를 계산기 인터프리터에 저장/호출하는 방법은 무엇입니까? 기본적으로 내가 이런 일을 달성하기 위해 찾고 있어요

:

def sum(a,b) { a + b } 

sum(5,5) 

결과 :

10 

모든 포인터 또는 예

필요한 개념에 확실히 다이빙의

답변

0

을 감상 할 수있다 프로그래밍 언어를 해석 (또는 컴파일)하기 때문에 StackOverflow에 적합한 형식으로 대답을 제공하기가 어렵습니다. 다음은 간단한 개요입니다.

  1. 함수와 변수를 모두 포함 할 수있는 기호 테이블이 필요합니다. 또는 두 개의 기호 표. 첫 번째 경우, 매핑 된 값은 차별화 된 공용체와 같은 일종의 변형 유형입니다. 변수 유형이 두 가지 이상이면 어쨌든 필요할 수 있습니다. 두 번째 경우에는 매핑 된 함수 이름 값에 특정 유형을 사용할 수 있습니다. 첫 번째 옵션은 함수가 최상위 클래스 객체가 될 수 있기 때문에 사용합니다.

  2. 함수 정의의 "값"을 나타내는 일종의 유형이 필요합니다. 분명한 유형은 표현식 (또는 프로그램)의 Abstract Syntax Tree (AST)이며, 일반적으로 코드를 단순화하므로 코드를 매우 권장합니다. 즉, 계산기/파서는 실제로는 5+5 (문자 입력 인 경우에도) 또는 a+b을 평가하지 않지만 AST를 파서를 호출 한 사람에게 반환합니다. 결과적으로 다음이 필요합니다.

  3. AST를 평가할 수있는 기능. 깊이 중심 트리 워크이기 때문에 작성하는 것이 일반적으로 간단합니다. 그러나 이제는 에 대해 걱정할 필요가 있습니다. 왜냐하면 여러분이 함수 sum의 본문을 평가할 때 매개 변수의 값만 로컬로 설정하기를 원할 것입니다.

당신이 모든 것을 관리하는 경우

, 당신은 보통 이상으로 여러 단계를 갈 것 프로젝트 "의 플렉스와 들소와 계산기를 만들어 보자", 나는 확실히 그렇게하는 것이 좋습니다. 기본 텍스트 Structure and Interpretation of Computer Programs (Abelson & Sussman, 1996, 간단히 SICP라고 함)을 살펴볼 수 있습니다.

+0

자세한 답변 해 주셔서 감사합니다. 나는 진지한 개념과 포인터가 도움이 될 것 같아. –