문제

나는 특정 정보를 찾고있는 의사 코드를 구문 분석하기 위해 mgrammar 사양을 구축하고 있습니다. 1 개의 cruical 요소를 제외하고 대부분의 사양이 작동합니다.

의사 코드는 if-then-else 구문을 지원하며이를 파싱하는 만족스러운 방법을 찾을 수 없었습니다. 정확한 구성은 ...

IF expression operator expression THEN
Statement1
Statement2
Statementn
ELSEIF expression operator expression THEN
Statement1
Statement2
Statementn
ELSE
Statement1
Statement2
Statementn
ENDIF

... 다른 곳과 elseif가 선택 사항입니다.

지금까지 내가 가진 것은`syntax statement = r : returnclause => r |
I : ifclause => i |
ei : elseifclause => ei |
E : elseclause => e |
종료 : endclause => end |
V : expression => V;

구문 ifclause = if name : 식별자 연산자 : 연산자 그런 다음 명령문 => [name, operator, 다음 [statement]];
구문 elseifclause = elseif 이름 : 식별자 연산자 : 연산자 그런 다음 명령문 : stater => elseif [이름, 연산자, [문]];
구문 elseclause = else 문 : stater => else [statement];
구문 endclause = endif; `

그러나 '당시'와 'else'이후의 진술은 충분히 탐욕스럽지 않으며 구문 분석 트리의 첫 번째 진술 만 포착합니다.

Mgrammar를 사용하여 IF 문의 구문 분석을 구현하려고 시도했거나 제안 사항이 있습니까?

도움이 되었습니까?

해결책

CodePlex의 아키타 입구 프로젝트에서 (거의) 완전한 C# 4.0 문법을 찾을 수 있습니다. Dan Vanderboom은 "Archetype"이라는 새로운 언어 코드를 준비하여 썼습니다.

아마도 도움이 될 것입니다 : http://archetype.codeplex.com/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top