시스템에는 (A+B)*C
과 같은 표현식을 작성해야하는 표기법이 있으며 #MUL(#ADD(A,B),C)
입니다. 사용자가보다 일반적인 방식으로 입력 할 수 있도록 이러한 종류의 표기법 변환을 수행하는 알고리즘이 이미 있습니까? 즉, infix -> my 표기법을 변환하는 알고리즘입니다. 첫 번째 문제는 제 표기법에 대한 정확한 이름을 모르겠다는 것입니다 ... 역 분개와 유사하지만 상당히 아닙니다. 모든 연산자는 인수를 취하는 함수로 인코딩됩니다.이 표기법 변환/변환을위한 기존 알고리즘이 있습니까?
답변
Shunting-yard algorithm은 중절 표기법을 구문 분석하는 데 사용할 수 있습니다.
10 초까지 나를 때려 눕히십시오. – Randy
+1. 나는 SY를 보았지만 비슷한 출력 표기법이 아니므로 다른 알고리즘이 더 가까운 성냥인지 궁금해했다. 이것은 기존의 알고리즘에 대한 사소한 수정입니까? –
Shunting 야드는 추상 구문 트리를 출력 할 수 있습니다. AST가 있으면 사전 예약을 통해 폴란드 표기법을 사용할 수 있습니다. –
여기에 일부는 Lisp that attempts the infix -> prefix transformation입니다. 유용한 출발점이 될 수 있습니다.
Lex와 Yacc (Flex와 Bison의 경우 동일 함)를 사용하여 이러한 간단한 표현식을 쉽게 파싱 할 수 있습니다. "Yacc 계산기"에 대한 Google.
내가 찾은 한 예가 http://www.indiastudychannel.com/resources/56696-IMPLEMENTATION-OF-CALCULATOR-USING-YACC.aspx이지만 결과를 계산하는 대신 최종 문자열을 작성해야합니다. 예를 들어, 다음과 같이 (의사 코드) :
expr: ‘(‘expr’)’
{
$$=$2;
}
|
expr ‘*’expr
{
$$="#MUL(" + S1 + "," + $3 + ")";
}
|
expr’/’expr
{
$$="#DIV(" + S1 + "," + $3 + ")";
}
모두 좋고 좋지만이 코드를 코드에 넣고 싶습니다. 사용 가능한 경우에도 실제로 라이브러리에 대한 전체 종속성을 추가하고 싶지는 않습니다. –
Lex와 Yacc는 표준 C 라이브러리 만 필요하다고 생각합니다. 내 응용 프로그램에서 복잡한 파일을 구문 분석하고 Lex 및 Yacc을 실행하면 내 빌드 프로세스의 일부로 사용됩니다. 귀하의 경우, Lex 및 Yacc를 로컬로 실행하고 프로젝트에서 생성 된 .H 및 .C 파일을 사용할 수 있습니다. 결국 Lex와 Yacc는 언어 설명을 처리하고 오히려 표준 .H 및 .C 파일을 생성합니다. 내가 생각하기에는이게 문제가 아니야. – Patrick
- 1. 이 그래프 문제에 대한 좋은 알고리즘이 있습니까?
- 2. 이 @ $ (<filename>) 표기법
- 3. 이 코드에는 어떤 알고리즘이 사용됩니까?
- 4. 문자열을 판단하는 알고리즘이 있습니까?
- 5. 표기법
- 6. 이 최소 스패닝 트리 알고리즘이 맞습니까?
- 7. 이 정렬 문제에 대한 알고리즘이 필요합니다!
- 8. 이 시나리오를 다루기위한 기존 용어/패턴이 있습니까?
- 9. 근처의 친구를 찾는 알고리즘이 있습니까?
- 10. 3D 구름을 생성하기위한 알고리즘이 있습니까?
- 11. 일광의 양을 결정하는 알고리즘이 있습니까?
- 12. 이 개 기존 배열
- 13. 파이썬 표기법?
- 14. $ {varName} 표기법
- 15. 알고리즘이 필요합니다.
- 16. 과학적 표기법
- 17. 복소수 표기법
- 18. 접두어 표기법
- 19. 리터럴 표기법
- 20. 표기법 문제
- 21. O (n) 정수 정렬 알고리즘이 있습니까?
- 22. 자바에서 과학 표기법 번호를 잘라내는 방법이 있습니까?
- 23. 익명의 변경 가능하고 안전한 투표 알고리즘이 있습니까?
- 24. 어떤 종류의 퍼지 범람 알고리즘이 있습니까?
- 25. XSLT XPath에서 '/ ..'표기법 사용
- 26. 십진법에 과학적 표기법
- 27. L \ 문자 표기법?
- 28. Intellij IDEA의 헝가리 표기법
- 29. GPU 용 문자열 배열 정렬 알고리즘이 있습니까?
- 30. 사진에 LINES를 찾는 초고속 알고리즘이 있습니까?
나는 "접두어 표기법"이라고 부릅니다. 왜냐하면 연산자가 중간 (중위)이 아닌 피연산자 목록의 시작 부분에 있기 때문입니다. – FrustratedWithFormsDesigner
이것은 Jan Łukasiewicz의 이름을 따서 명명 된 폴란드 표기법입니다. 역 폴란드 표기법과 비슷합니다 ... 역방향;) –
둘 다 호출됩니다. –