2010-07-24 5 views
2

와 뉴 라인과 일치하는 방법 나는 숫자 표현식에 대한 통역을 만들려고 노력하고 있어요 여기는 알렉스/하스켈

http://www.haskell.org/alex/doc/html/introduction.html

을 제시 한 예를 빌렸다. (리터럴 만, 변수 없음) 그리고 두 개의 서로 다른 표현식을 개행 문자로 구분하고 싶습니다. Unfortunaltely,이

$ ignoredWhite = \ t \ F \ V \ R] 할 때 - 무시 공백

달러 개행 = "\ n"--new 라인

알렉스 (V 2.2) 컴파일을 중단합니다. 이 입력을 읽을 때 나는

$ 줄 바꿈 = \ n --new 라인

하지만 단지 (일명 하나 GHC에 의해 생성 된) 최종 바이너리에 알렉스에서 이동하는 중단 원인을

을 시도했습니다.

어떻게 수정해야합니까?

답변

1

그냥 추측 - 문자 범위에서 포함 시키려고 했습니까?

$newline = [\n] 
+0

예. 그것은 그런 식으로도 작동하지 않습니다. –

+0

컴파일을 중단하면 오류가 발생합니까? – Gian

2

이 질문은 실제로 오래된 것입니다. 그럼에도 불구하고 미래의 방문자에게 대답을 게시 할 것입니다. 토큰이 정의되면, 나는 모든 공백을 처리하기 위해 알렉스에게 :

tokens :- 
    $white {\p s -> checkWhite p $ head s} 

checkWhite는 다음과 같습니다 : 개행 문자가 발견 될 때 당신이 볼 수 있듯이

checkWhite :: AlexPosn -> Char -> Token 
checkWhite p '\n' = TNewLine p 
checkWhite p _ = TEmpty 

, 그것은 특별한 토큰을 출력합니다. 출력에서 TEmpty을 삭제하려면 ... filter (\= TEmpty) $ alexScanTokens ...을 사용할 수 있습니다.