2011-04-08 5 views
3

저는 F #, 즉 FsLex와 FsYacc의 조합을 사용하여 장난감 컴파일러에서 작업하고 있습니다. 그 (것)들에 익숙하게하기 위하여는, 나는 전문가 F # (v2) 책 (좋은 책 btw)의 Lexer/Parser 장을 읽었다. 바로 지금, 나는 ocamlyacc 튜토리얼을 잘 살펴 보았고 마지막 예제 인 다기능 계산기 mfcalc을 고수했습니다. 특히, 파서 파일에 다음 문다음 ocamlyacc 코드에 해당하는 fsyacc는 무엇입니까?

%token <float->float> FNCT 

오류 "오류 : 구문 분석 오류"점점 계속 내 F# version에. 여기에 아무 것도 없거나 F #에서 현재 지원되지 않는 기능입니까?

답변

4

이것은 버그와 같습니다. 괄호 추가는 도움이되지 않습니다. 다양한 해결 방법을 시도했지만 깨끗한 방법을 찾을 수 없습니다. 버그 보고서를 작성해야합니다.

당신이 (튜토리얼 예처럼) 하나 개의 기능이있는 경우, 당신은 전주곡의 유형을 정의한다 : 당신은 많은 기능이있는 경우

type floatFunction = float -> float 
... 
%token <floatFunction> FNCT 

, 당신은 또한 제네릭 형식을 정의 할 수 있습니다 :

type functionType<'a, 'b> = 'a -> 'b 
... 
%token < ('a, 'b) functionType > FNCT 

형식에 꺾쇠 괄호가 있으면 구문 분석 오류가 발생합니다 (심지어 functionType<float,float>).

+0

제안대로 접근 방법을 시도했습니다. 문제를 해결했습니다. 감사. BTW, 나는 아직도 ocamlyacc 문법을이 경우에 고려한다. 훨씬 깨끗하고 자연 스럽다. – Cygwin98

+0

방금 ​​F # 팀에 버그 보고서를 보냈습니다. – Cygwin98

+0

@ Cygwin98 그들은 버그를 수정 했습니까? –

0

당신은 (멀리 F 번호 기계에서 오전 확인) 잊지

%token <(float->float)> FNCT 

처럼 괄호를 넣어해야 할 수도 있습니다.

+0

안녕하세요, Brian, 나는 괄호를 추가 했으므로 이제 오류가 Parser.fsy (11,21)로 변경되었습니다. 오류 : 예기치 않은 문자 ')' – Cygwin98