2017-03-12 6 views
0

나는 렉싱의 개념에 새로운 오전 다음 예제 입력을 읽어 OCaml의에 렉서를 작성하는 것을 시도하고있다 :ocamllex를 사용하여 문자열의 렉싱을 어떻게 구현합니까?

(blue, 4, dog, 15) 

는 기본적으로 입력이 어떤 임의의 문자열 또는 정수의 목록입니다. 대부분은 계산기를 모델링했기 때문에 int 기반 입력에 대한 많은 예제를 찾았지만 예제를 통해 지침을 찾지 못했거나 렉싱 문자열에 대한 설명서를 찾지 못했습니다. 여기까지 내 렉스는 다음과 같습니다.

(* File lexer.mll *) 
{ 

open Parser 

} 

rule lexer_main = parse 
     [' ' '\r' '\t']  { lexer_main lexbuf }  (* skip blanks *) 
    | ['0'-'9']+ as lxm { INT(int_of_string lxm) } 
    | '('  { LPAREN } 
    | ')'  { RPAREN } 
    | ','  { COMMA } 
    | eof  { EOF } 
    | _  { syntax_error "couldn't identify the token" } 

문자열을 파싱하는 기능이 누락되었습니다. 나는 문자열이 ['a'-'z'] 형태로 표현 될 수 있다는 것을 잘 알고 있으므로 간단 할 것입니다. ['a'-'z'] { STRING } 도움을 주셔서 감사합니다.

답변

1

표기 ['a'-'z']은 문자열이 아닌 단일 문자를 나타냅니다. 따라서 문자열은 그 중 하나 이상의 시퀀스입니다. 저는 이것이 할당이라는 두려움을 가지고 있습니다. 그래서 여러분은 INT에 사용하는 것과 같은 기술을 사용하여 한 문자의 패턴을 같은 종류의 문자 시퀀스의 패턴으로 확장 할 수 있다고 말하고 싶습니다.

그러나 실제로 문자열이 너무 제한적인지 여부를 궁금해합니다. 알파벳 문자로만 구성해야합니까?