2014-11-27 6 views
0

Java에서 문자열에서 읽은 표현식을 평가하는 계산기를 작성하려고합니다.연산자가 괄호 안에 중첩되어 있는지 확인하십시오.

내 알고리즘은 입력 문자열을 최하위 우선 순위 연산 (즉 가장 오른쪽 +)으로 재귀 적으로 분할 한 다음 이진 연산이있는 시점을 평가합니다.

연산자가 괄호 안에 중첩되었는지 여부를 확인하는 데 문제가 있습니다.

이 수표입니다 - 특급는 식의 문자열, lastMD 문제의 운영자가 작동 심지어 다른 점프하지 않는 몇 가지 이유를 들어 특급

if (exp.lastIndexOf('(', lastMD) != -1 && exp.lastIndexOf('(', lastMD) < lastMD && exp.lastIndexOf('(', lastMD) > exp.lastIndexOf('(', lastMD)) { 
    // it is in parenthesis 
} 
else { 
    // it is not in parenthesis 
} 

에있는 인덱스입니다 lastMD가 괄호로 둘러싸인 경우.

무엇이 누락 되었습니까?

감사합니다.

+0

괄호 부분은 [여기]를보세요. (http://stackoverflow.com/questions/26974739/split-a-complex-string-based-on-grouping-of-small-brackets-in-java/26975501 # 26975501). 괄호가 쌍으로 중첩 된 것처럼 보이기 때문에 간단한 indexOf는 쉽게 수행되지 않습니다. 그 답변에서 중첩 된 표현식이 먼저 해결됩니다. –

답변

1

가 true를 반환 할 수 없다 지금 표현으로 조건 :

int i = exp.lastIndexOf('(', lastMD); 
if (i != -1 && i < lastMD && i > i) { ... 

i > i 항상 false로 평가됩니다.

메모에서 이미 지적했듯이 간단한 구문 분석기와 같은 다른 방법을 사용하여 통과 가능한 AST를 만들 수도 있습니다 (ANTLR 참조).

다음과 같은 관련 질문도 유용 할 수 있습니다. How does a simple calculator with parentheses work?.

+0

고맙습니다. 나는 바보입니다. 그렇습니다. 이것이 나의 임무 였지만 다른 방법이 있습니다. 다시 한 번 감사드립니다. – Simba18

0

언어 및 컴파일러를 처음 사용하신 것처럼 보입니다. Rock Solid 표현식 평가기를 구현하려면 Java에서 "재귀 적 파서 파서"구현을 검색하십시오. 더 나은 점은 테이블 구동 파서 (예 : JavaCC 기반)를 구축했지만 학습 곡선이 가파른 점입니다.

관련 문제