728x90
반응형

계산기 5

[C++] 계산기 만들기 (5) the driver

The Driver 프로그램의 모든 부분이 제자리에 있다면 드라이버만 추가하면 작업을 시작할 수 있다. 실제 계산을 수행하는 calculate()와 실제 수행을 하게 되는 main() 함수로 구성된다. Token_stream ts {cin}; // use input from cin void calculate() { for (;;) { ts.get(); if (ts.current().kind == Kind::end) break; if (ts.current().kind == Kind::print) continue; cout get(ch) && isalnum(ch)) ct.string_value += ch; ip->putback(ch); ct.kind = Kind::name; return ct; } error..

[C++] 계산기 만들기 (3) low-level input

Low-level input 지금까지 정의된 대로 계산기를 사용하면 몇 가지 불편한 점이 드러난다. 값을 출력하기 위해 표현식 뒤에 세미콜론을 추가하는 것은 지루한 면이 있고 이름이 공백만으로 끝나는 것은 골치 아픈 일이다. 예를 들어, x=7은 식별자 x 뒤에 연산자 = 와 숫자 7이 오는 것이 아니라 식별자 - 다. 원하는 것을 얻으려면 x =7 뒤에 공백을 추가해야 한다. 두 문제 모두 get()의 type-oriented default input을 읽는 코드로 교체하여 해결할 수 있다. Token Token_stream::get() { char ch; do { // skip whitespace except ’\n’ if (!ip−>get(ch)) return ct={Kind::end}; } whi..

[C++] 계산기 만들기 (2) input

Input 입력 읽기는 종종 프로그램에서 가장 곤란한 부분이다. 사람과 의사소통하기 위해 프로그램은 그 사람의 변덕, 관습 및 겉으로 보기에 무작위적인 오류에 대처해야 한다. 사람이 기계에 더 적합한 방식으로 강요하는 것은 공격적으로 간주되기도 한다. 저수준 입력 루틴의 작업은 문자를 읽고 문자에서 더 높은 수준의 토큰을 구성하는 것이다. 이런 토큰은 상위 수준 루틴에 대한 입력 단위다. 여기서 저수준 입력은 ts.get()에 의해 수행된다. 저수준 입력 루틴을 작성하는 것이 일상적인 작업일 필요는 없다. 많은 시스템은 이를 위한 표준 기능을 제공한다. 먼저 Token_stream의 전체 정의를 확인해 보자. class Token_stream { public: Token_stream(istream& s)..

[C++] 계산기 만들기 (1) parser

부동 소수점 숫자에 대한 중위 연산자로 네 가지 표준 산술 연산을 제공하는 간단한 탁상용 계산기 프로그램을 만들어보자. 사용자는 변수를 정의할 수도 있다. 예를 들어 주어진 입력 r = 2.5 area = pi ∗ r ∗ r (pi는 미리 정의됨) 계산기 프로그램은 다음과 같은 결과를 보여 줍니다. 2.5 19.635 여기서 2.5는 첫 번째 입력 라인의 결과이고 19.635는 두 번째 라인의 결과다. 이 계산기는 네 개의 메인 파트로 구성된다. (parser, 입력 함수, 기호 테이블, driver). 실제로 이것은 구문 분석기가 구문 분석을 수행하고 입력 기능이 입력 및 어휘 분석을 처리하며 기호 테이블이 영구 정보를 보유하고 driver가 초기화, 출력 및 오류를 처리하는 소형 컴파일러다. 더 유용..

728x90
반응형