2012-02-25 5 views
1

이것은 인터넷의 어딘가에있는 잘 알려진 예제 중 하나가되어야합니다.하지만 찾을 수없는 것 같습니다.xtext : 표현식/요소/용어 문법

저는 XText를 배우려고하고 있습니다. 계산기 표현 파서가 좋은 시작이라고 생각했습니다. 하지만 내 문법 구문 오류를 받고 있어요 :

Expression: 
    Term (('+'|'-') Term)*; 

Term: 
    Factor (('*'|'/') Factor)*; 

Factor: 
    number=Number | variable=ID | ('(' expression=Expression ')'); 

나는 표현 및 용어 라인이 오류가 발생합니다 :

Multiple markers at this line 
- Cannot change type twice within a rule 
- An unassigned rule call is not allowed, when the 'current' 
    was already created. 

무슨 준다? 이 문제를 어떻게 해결할 수 있습니까? 그리고 언제 문법에 대 Rule 항목이 있습니까?

답변

2

eclipse와 통합 된 xtext를 다운로드했으며 arithmetics라고하는 약식 계산기 예제가 제공됩니다. 내가 수집 할 수있는 것부터 토큰에 연관성을 지정해야합니다. 이 문법은 나를 위해 잘 실행 :

Expression: 
    Term (({Plus.left=current}'+'|{Minus.left=current}'-') right=Term)*; 

Term: 
    Factor (({Multiply.left=current} '*'| {Division.left=current}'/') right=Factor)*; 

Factor: 
    number=NUMBER | variable=ID | ('(' expression=Expression ')'); 

이를 arithmetics에 대한 그들이 가지고있는 예제 문법 here을 볼 수 있습니다. 그것은 함수 호출과 같이 여러분의 것보다 조금 더 많은 것을 포함하지만, 기본은 동일합니다.

+0

매우 도움이됩니다. 이 '{Plus.left = current}'구문이 의미하는 것을 설명하는 참조를 가르쳐 주시겠습니까? –

+0

솔직히 모르겠지만 전에 xtext를 사용해 본적이 없습니다. 그러나 그것은 파스 트리를 구성하는'Plus'라는 인터페이스를 생성합니다. .left는 현재 토큰을 할당 된 동작의 왼쪽 부분에 연결합니다. http://www.eclipse.org/Xtext/documentation/2_0_0/020-grammar-language.php#syntax – Dervall