2013-05-10 11 views
0

배열 및 행렬이있는 클래스를 필드로 지원하는 것으로 가정되는 작은 언어 용 컵 파서를 작성했습니다. 쉬프트의/감소하기 때문에,컵 파서에서의 시프트/감소 충돌 (얼라이언스 및 행렬이있는 문법)

c.x; 
c.y[]; 
c.z[][]; 

나는 문제가이 마지막 부분의 생산을 쓰는 데 :

C c; 

필드가 함께 액세스 할 수있는 예를 들어, 클래스 인스턴스가있는 경우 갈등 나는 계속 간다.

Designator ::= IDENT 
       | 
       Designator DOT IDENT 
       | 
       Designator LSQUARE Expr RSQUARE 
       | 
       Designator LSQUARE Expr RSQUARE LSQUARE Expr RSQUARE 
       ; 

경고 :이 내 생산, 상태 #에서 발견 * 시프트/갈등을 줄일 수 189 부호 사이 :: = 부호 LSQUARE EXPR RSQUARE () 및 부호 :: = 부호 LSQUARE EXPR RSQUARE () LSQUARE Expr RSQUARE 기호 LSQUARE 이동을 위해 해결됨.

누구든지 해결할 수 있습니까?

답변

0

마지막으로 Designator 문법의 줄이 잘못되었습니다. Designator LSQUARE Expr RSQUARE (위의 두 줄)은 임의적 인 여러 차원의 들쭉날쭉 한 배열 표현식을 이미 재귀 적으로 정의합니다.

c.y[a].b 

을 그리고 다음은 잘못된 것 :

문법에 따르면, 다음과 같은 표현이 유효 할 것

c.y[a].z[b] 

는 의도로인가요?

가변 배열에 대해 알고있는 C# grammar을 보면 고무적 일 수 있습니다.