2013-06-17 3 views
1

:정수 - 내 파서에 대한 다음과 같은 규칙을 컴파일 할 때 나는 문제로 실행하고 OCaml의

%%

EXPR은 :

| expr ASN expr { Asn ($1, $2) } 

이 할당 규칙입니다 그 다음 내 대소 문자에 정의 된대로 할당 (등호) 및 표현식을 사용합니다.

유형 expr = Asn of int * expr

물론 "expr ASN expr"을 정의 중이므로 첫 번째 인수는 표현식이 아닌 정수 여야하므로 컴파일러는 불평합니다. 그러나이를 지정하는 구문을 이해할 수 없었습니다.

누군가가 올바른 방향으로 나를 이끌 수 있다면, 나는 정말로 감사 할 것입니다.

감사합니다.

답변

0

은 아마 당신이 원하는 것은 할당 그대로 INT 또한 정수 리터럴로서 예 :

| [a-zA-z]+ { VAR($1) } 
| [0-9]+ as i { INT(int_of_string i) } 
+1

매우 도움이 되었어요. 고마워요. 나는 해결했다. – Irina

1

좋은 답변을 제공하기에 충분한 세부 정보를 제공하지 않습니다. 정수로 무엇을 의미합니까? 정수 리터럴이라고 가정합니다.

어휘 정의에 정수 리터럴을 나타내는 INT라는 토큰이 있다고 가정하면 다음과 같이 할 수 있습니다.

expr: 
    | VAR ASN INT { Asn ($1, $2) } 
당신이 문자열로 VAR을 정의해야 렉서에서

과 : 같은 파서

type expr = Asn of var * int 

하고 정의 EXPR :

expr: 
    | INT ASN expr { Asn ($1, $2) }