2011-03-15 2 views
3

ocamllex를 사용하여 OCaml에서 장난감 프로그래밍 언어를 작성하는 것을 망설이고, 파이썬 스타일의 들여 쓰기 변경에 민감한 언어를 만들려고했지만 ocamllex의 정규식 규칙을 사용하여 줄의 시작과 일치하는 문제가 발생했습니다. 나는 ^을 사용하여 줄의 시작을 일치시키는 데 익숙하지만, 문자열 연결 연산자 인 OCaml에서 사용되었습니다. 구글 검색은 불행히도 나를 위해 많이 쓰이지는 않았다. (누구나 어떻게 작동하는지 알 수있다.)OCamllex는 줄의 시작과 일치합니까?

+2

정규 표현식의 문법은 여기에서 찾을 수 있습니다. http://caml.inria.fr/pub/docs/manual-ocaml/manual026.html#regexp – nlucaroni

+0

참으로 나는 그것을 보았습니다. 나는 그저 뭔가를 놓쳤다는 것과 그 이상의 것이 있었기를 바랬습니다. 감사! –

+0

문제 없습니다. Lex와 유사한 주장과 일반 정규 표현식 언어에 대한 지식을 기반으로하는 것은 당연한 생각입니다. 왜 그들이 그것을 포함하지 않았는지 나는 확신하지 못한다. fa.caml google 그룹에 물어볼 수 있습니다. – nlucaroni

답변

4

길이가 0 인 일치하는 심볼 (예 : ^, Perl 스타일의 정규 표현식)을 명시 적으로 지원하는지 모르겠습니다. .

parser.mly

%token EOL 
%token <int> EOLWS 
% other stuff here 
%% 
main: 
    EOL stmt    { MyStmtDataType(0, $2) } 
    | EOLWS stmt    { MyStmtDataType($1 - 1, $2) } 
; 

렉서 :) 문자열이 아닌 위치와 일치하는 그러나,이 같은 당신의 렉서가 명시 적으로 토큰으로 줄 바꿈을 돌려 보자 할 수 있어야한다 .mll

{ 
open Parser 
exception Eof 
} 
rule token = parse 
    [' ' '\t']   { token lexbuf }  (* skip other blanks *) 
    | ['\n'][' ']+ as lxm { EOLWS(String.length(lxm)) } 
    | ['\n']    { EOL } 
    (* ... *) 

이 검증되지 않은,하지만 일반적인 생각입니다 : 바로 줄 바꿈을 다음과 int 로 길이를 통과 '우선'

  • 측정 공백 staetment로

    • 취급 행법

    경고 : 입력을 사전 처리하여 \n이 하나도없는 경우 시작해야합니다.

  • 관련 문제