인터프리터
-
인터프리터...26일지 2020. 12. 14. 11:36
전자 계산기 프로그램 재귀적 하향 구문 분석 루틴을 이용해 전자 계산기를 만든다. 적용할 기능은 다음과 같다. 변수는 a~z, 26개 정수만 지원 연산 및 대입 처리 연산자 () + - * / 지원 사칙 연산 법칙 적용 ? 로 출력 공백 상태에서 엔터 시 종료 MiniCalculator.h #pragma once #include #pragma region 토큰 설정 enum class TokenKind : char { LeftParenthesis = '(', RightParenthesis = ')', Plus = '+', Minus = '-', Multiply = '*', Divide = '/', Assign = '=', Print = 1, VariableName, Int, EndOfToken, Othe..
-
인터프리터...24일지 2020. 12. 9. 11:56
역 폴란드 표기법 프로그램 실행 및 테스트 ReversePolish.h #pragma region 실행 처리 // a ~ z를 각각 변수이고 1 ~ 26이 저장되었다고 가정한다. int GetValue(char ch) { if (islower(ch)) { return ch - 'a' + 1; } return 0; } int Execute() { int num1, num2; char* str{ polish_result }; top = 0; while(*str != '\0') { // 변수 처리 if (islower(*str)) { Push(GetValue(*str)); } // 숫자 처리 else if (isdigit(*str)) { Push(*str - '0'); } // 연산자 처리 else { num..
-
인터프리터...23일지 2020. 12. 7. 12:01
역 폴란드 표기법 프로그램 역 폴란드 표기법 처리 함수 작성 ReversePolish.h #pragma region 역 폴란드 표기법 char polish_result[80]; void Polish(char* str) { int temp; char* result = polish_result; top = 0; while (true) { while (isspace(*str)) { str++; } // 행의 마지막인 경우 if (*str == '\0') { while (top > 0) { *result = Pop(); if (*result == '(') { std::cout
-
인터프리터...22일지 2020. 12. 2. 12:02
역 폴란드 표기법 프로그램 스택, 우선순위 작성 ReversePolish.h #pragma once #include #pragma region 우선순위 설정 int Order(const int ch) { switch (ch) { case '*': case '/': return 3; case '+': case '-': return 2; case '(': return 1; } return -1; } #pragma endregion #pragma region 스택 처리 #define STACK_SIZE 20 int stack[STACK_SIZE]; int stackHead; void Push(int n) { if (stackHead >= STACK_SIZE) { throw std::out_of_range("s..
-
인터프리터...21일지 2020. 12. 1. 15:20
역 폴란드 표기법을 사용한 식의 분석 식의 우선순위에 따라 식을 후치 기법으로 변환하는 것을 역 폴란드 표기법이라고 하며 정렬된 식은 괄호와 우선순위가 제거되며 앞에서부터 순서대로 읽어서 사용할 수 있게 된다. 식 역폴란드 표기법 한글로 표기 a + b a b + a에 b를 더한다 a + b + c a b + c + a에 b를 더한 결과에 c를 더한다 a + b * c a b c * + a에 b와 c를 곱한 결과를 더한다 (a + b) * c a b + c * a에 b를 더한 결과에 c를 곱한다 변환 패턴과 변환 방법 역 폴라드 표기법으로 변환할 때 우선순위가 더 높은 토큰이 입력되는 경우 변환을 잠시 미루고 우선순위가 높은 토큰을 먼저 처리한다. 이를 적용해 변환하는 방법은 다음과 같다. 요소의 우선순..
-
인터프리터...20일지 2020. 11. 30. 14:22
식의 표현 인터프리터에서는 어휘 분석으로 토큰을 확정한 뒤 구문 분석으로 해석하며 실행한다. 이때 구문 분석의 중심이 되는 것이 식의 분석이다. 식을 분석하는 방법은 크게 세 가지가 존재한다. 중치 기법 연산자가 값 중간에 나타나는 방식. (a + b) 후치 기법 연산자가 값 뒤에 나타나는 방식 (a b +) 전치 기법 연산자가 값 앞에 나타나는 방식 (+ a b) 컴파일러나 인터프리터에서는 필요한 값을 저장해 두고 연산자가 등장했을 때 필요한 개수만큼 로드해 사용할 수 있으므로 후치 기법이 적절하다. 더보기 참고문헌 만들면서 배우는 인터프리터하야시 하루히코 상세보기
-
인터프리터...19일지 2020. 11. 26. 14:40
오류 처리와 오류 복구 문법 오류가 발생했을 때 어떻게 처리할 것인지 고민해야 한다. 단순한 인터프리터는 오류 처리도 단순하게 처리한다. 오류 처리 방법 단순한 인터프리터는 오류 처리도 단순하게 한다. 오류 발생 시 그 즉시 실행을 중지하고 에러를 발생시킨다. 오류 발생 시 가능한 경우 오류 복구 후 실행을 지속하고 에러 메시지만 화면에 표시한다. 오류 개수가 일정 이상이 되면 실행을 중지한다. 오류 복구 예측 가능한 오류를 적절히 실행 가능하도록 수정하여 실행시키는 방식 for a 1 10 -> for a 1 to 10 과 같이 단순한 실수를 보정해줄 수 있다. 참고문헌 참고문헌 만들면서 배우는 인터프리터하야시 하루히코 상세보기