2016-09-12 2 views
0

Coco/R에 매달려있는 문제가 있습니다. 나는 Coco/R User Manual을 이해하려고 노력하며 Google에 요청하지만 문제는 직접 해결할 수 없습니다.Coco/R에서 매달려있는 다른 방법을 해결하는 방법은 무엇입니까?

Coco/R (Dec 22, 2014) 
checking 
new 4.atg(15,1): LL1 warning in Expr: number is start of several alternatives 
new 4.atg(15,1): LL1 warning in Expr: name is start of several alternatives 
parser + scanner generated 
0 errors detected 

: 나는 coco.bat와 컴파일러를 구축하려는 경우

COMPILER Expr 
CHARACTERS 

    digit = '0'..'9'. 
    letter = 'A'..'Z'. 

TOKENS 

    number = digit { digit }. 
    name = letter { digit | letter }.  

PRODUCTIONS 

    Expr = Test | Id Test. 
    Test = Test2. 
    Test2=Id | "(" Test ")".   
    Id=IdName|IdNumber.   
    IdName = name. 
    IdNumber = number.  

END Expr. 

, 나는이 답변을 얻을 :

나는 (new4.atg에 저장) 다음 코코/R 문법에 내 문제를 단순화 best result in Google에서 나는 IF(isXXXFollowYYY()) 선언문을 읽을 수 있다고 읽었지 만, 최선의 해결책이라면 어떻게 될지 모르겠다. (내 예에.? Expr = Test | If(isTestFollowID)Id Test 그러나 isTestFollowID 선언)

내가 coco.bat를 시작할 때, 어떤 경고를 얻을 싶어요.

답변

0

문법이 모호합니다.

Expr에서 바라 Id 토큰을 볼 때, 파서는 갈 수 있습니다

Expr -> Test -> Test2 -> Id 

또는

Expr -> Id 

LL (1) 파서가 가지고있는 경로를 알 수 없습니다.

대신

Expr = Test | Id Test. 

당신은 그러나

Expr = [Id] Test . 

을 수행 할 수 있습니다

즉각적인 문제

Expr 생산 리드 인 선택적 구성 요소로 밖으로 Id를 당겨 고정 할 수 있습니다 제품 번호 Test도 처음에는 Id과 일치 할 수 있으므로 더 많은 리팩토링 문법 LL (1)을 만드는 데 필요한 숫자가 필요합니다.

+0

나는 귀하의 솔루션을 테스트했습니다. 'Expr = [Id] Test.'. 결과는 같습니다. (_LL1 경고 expr : 번호가 시작 및 삭제 가능한 구조의 후계 _) 추가로 필요한 리팩토링은 무엇입니까? – Eric

관련 문제