본문내용
본 프로그램은 중위식(Infix)을 후위식(Postfix)으로 변환한 다음에
계산하는 자바(Java) 프로그램입니다.
클래스는 MyCalculatorDemo, MyCalculator, MyExprTokenizer, MyToken으로 구성됩니다.
MyCalculatorDemo는 본 프로그램을 테스트하는 클래스입니다.
MyCalculator는
ArrayList translateFromInfixToPostfix(String infix);
int calculatePostfix(ArrayList postfix);
두 개의 메소드로 구성되어 있습니다.
translateFromInfixToPostfix()는 중위식(Infix)을 문자열로 받아서
후위식(Postfix)을 ArrayList 형식으로 반환하는 메소드입니다.
calculatePostfix()는 후위식을 ArrayList로 받아서
계산 결과를 int 값으로 반환하는 메소드입니다.
MyExprTokenizer는 중위식의 문자열을 토큰화하기 위한 클래스입니다.
MyToken는 토큰 정보를 위한 클래스입니다.
컴파일은
javac -cp . MyCalculatorDemo.java
실행은
java -cp . MyCalculatorDemo 1+2*(3-4)
와 같이 할 수 있습니다.
실행 결과는 중간에 남은 토큰, 스택 상태, 중간 결과뿐만 아니라,
액션까지 표시합니다.
또한, 괄호 연산 기능도 포함하고 있습니다.
실행 결과는 다음과 같습니다.
**************************************************
INFIX:
1+2*(3-4)
**************************************************
**************************************************
TOKENS:
[1, +, 2, *, (, 3, -, 4, )]
**************************************************
**************************************************
POSTFIX:
[1, 2, 3, 4, -, *, +]
**************************************************
**************************************************
==================================================
# Tokens:[1, 2, 3, 4, -, *, +]
# Stack:[]
# Token [1] is operand...
# The operand is pushed into the stack...
==================================================
==================================================
# Tokens:[2, 3, 4, -, *, +]
# Stack:[1]
# Token [2] is operand...
# The operand is pushed into the stack...
==================================================
==================================================
# Tokens:[3, 4, -, *, +]
# Stack:[1, 2]
# Token [3] is operand...
# The operand is pushed into the stack...
==================================================
==================================================
# Tokens:[4, -, *, +]
# Stack:[1, 2, 3]
# Token [4] is operand...
# The operand is pushed into the stack...
==================================================
==================================================
# Tokens:[-, *, +]
# Stack:[1, 2, 3, 4]
# Token [-] is operator...
# Two operands are popped from the stack...
--------------------------------------------------
# Operator: -
# Operand 1: 3
# Operand 2: 4
# Intermediate result: -1
--------------------------------------------------
# The intermediate result is pushed into the stack...
==================================================
==================================================
# Tokens:[*, +]
# Stack:[1, 2, -1]
# Token [*] is operator...
# Two operands are popped from the stack...
--------------------------------------------------
# Operator: *
# Operand 1: 2
# Operand 2: -1
# Intermediate result: -2
--------------------------------------------------
# The intermediate result is pushed into the stack...
==================================================
==================================================
# Tokens:[+]
# Stack:[1, -2]
# Token [+] is operator...
# Two operands are popped from the stack...
--------------------------------------------------
# Operator: +
# Operand 1: 1
# Operand 2: -2
# Intermediate result: -1
--------------------------------------------------
# The intermediate result is pushed into the stack...
==================================================
RESULT:
-1
******************************
계산하는 자바(Java) 프로그램입니다.
클래스는 MyCalculatorDemo, MyCalculator, MyExprTokenizer, MyToken으로 구성됩니다.
MyCalculatorDemo는 본 프로그램을 테스트하는 클래스입니다.
MyCalculator는
ArrayList translateFromInfixToPostfix(String infix);
int calculatePostfix(ArrayList postfix);
두 개의 메소드로 구성되어 있습니다.
translateFromInfixToPostfix()는 중위식(Infix)을 문자열로 받아서
후위식(Postfix)을 ArrayList 형식으로 반환하는 메소드입니다.
calculatePostfix()는 후위식을 ArrayList로 받아서
계산 결과를 int 값으로 반환하는 메소드입니다.
MyExprTokenizer는 중위식의 문자열을 토큰화하기 위한 클래스입니다.
MyToken는 토큰 정보를 위한 클래스입니다.
컴파일은
javac -cp . MyCalculatorDemo.java
실행은
java -cp . MyCalculatorDemo 1+2*(3-4)
와 같이 할 수 있습니다.
실행 결과는 중간에 남은 토큰, 스택 상태, 중간 결과뿐만 아니라,
액션까지 표시합니다.
또한, 괄호 연산 기능도 포함하고 있습니다.
실행 결과는 다음과 같습니다.
**************************************************
INFIX:
1+2*(3-4)
**************************************************
**************************************************
TOKENS:
[1, +, 2, *, (, 3, -, 4, )]
**************************************************
**************************************************
POSTFIX:
[1, 2, 3, 4, -, *, +]
**************************************************
**************************************************
==================================================
# Tokens:
# Stack:
# Token [1] is operand...
# The operand is pushed into the stack...
==================================================
==================================================
# Tokens:
# Stack:
# Token [2] is operand...
# The operand is pushed into the stack...
==================================================
==================================================
# Tokens:
# Stack:
# Token [3] is operand...
# The operand is pushed into the stack...
==================================================
==================================================
# Tokens:
# Stack:
# Token [4] is operand...
# The operand is pushed into the stack...
==================================================
==================================================
# Tokens:
# Stack:
# Token [-] is operator...
# Two operands are popped from the stack...
--------------------------------------------------
# Operator: -
# Operand 1: 3
# Operand 2: 4
# Intermediate result: -1
--------------------------------------------------
# The intermediate result is pushed into the stack...
==================================================
==================================================
# Tokens:
# Stack:
# Token [*] is operator...
# Two operands are popped from the stack...
--------------------------------------------------
# Operator: *
# Operand 1: 2
# Operand 2: -1
# Intermediate result: -2
--------------------------------------------------
# The intermediate result is pushed into the stack...
==================================================
==================================================
# Tokens:
# Stack:
# Token [+] is operator...
# Two operands are popped from the stack...
--------------------------------------------------
# Operator: +
# Operand 1: 1
# Operand 2: -2
# Intermediate result: -1
--------------------------------------------------
# The intermediate result is pushed into the stack...
==================================================
RESULT:
-1
******************************