ocamllex를 사용하여 OCaml에서 장난감 프로그래밍 언어를 작성하는 것을 망설이고, 파이썬 스타일의 들여 쓰기 변경에 민감한 언어를 만들려고했지만 ocamllex의 정규식 규칙을 사용하여 줄의 시작과 일치하는 문제가 발생했습니다. 나는 ^
을 사용하여 줄의 시작을 일치시키는 데 익숙하지만, 문자열 연결 연산자 인 OCaml에서 사용되었습니다. 구글 검색은 불행히도 나를 위해 많이 쓰이지는 않았다. (누구나 어떻게 작동하는지 알 수있다.)OCamllex는 줄의 시작과 일치합니까?
3
A
답변
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
로 길이를 통과 '우선'
- 취급 행법
경고 : 입력을 사전 처리하여 \n
이 하나도없는 경우 시작해야합니다.
정규 표현식의 문법은 여기에서 찾을 수 있습니다. http://caml.inria.fr/pub/docs/manual-ocaml/manual026.html#regexp – nlucaroni
참으로 나는 그것을 보았습니다. 나는 그저 뭔가를 놓쳤다는 것과 그 이상의 것이 있었기를 바랬습니다. 감사! –
문제 없습니다. Lex와 유사한 주장과 일반 정규 표현식 언어에 대한 지식을 기반으로하는 것은 당연한 생각입니다. 왜 그들이 그것을 포함하지 않았는지 나는 확신하지 못한다. fa.caml google 그룹에 물어볼 수 있습니다. – nlucaroni