2017-03-12 5 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']は、文字列ではなく1文字を表します。だから、文字列は多かれ少なかれそれらのうちの1つ以上のシーケンスです。私はこれが割り当てであることを恐れているので、同じ種類の文字シーケンスのパターンに1文字のパターンを拡張して、INTと同じテクニックを使用してパターンを拡張することができます。

しかし、実際にあなたの文字列を制限的にしたいかどうかは疑問です。彼らは本当にアルファベット文字だけで構成する必要がありますか?

関連する問題