2010-11-25 10 views
2

文法を使用し、この文法がLL(1)かどうかを確認するプログラムを作成しています。私はモジュールセットを使用したいが、私はどのように進めるべきかわからない、もちろん、セットの要素のタイプは、あなたが助けることができますか?モジュールを使用するOcamlを設定する

答えて

3

この回答は、文法がLL(1)かどうかを判断する方法をすでに知っており、Objective Caml Setモジュールの特定の使い方に関するヘルプを探しているだけであることを前提としています。

標準ライブラリSetはあなたの特定のニーズに適合し、独自のセット・モジュールを構築することができますファンクタを提供します。その上a < b場合a = b場合compare a b = 0compare a b < 0と:あなたは、セット内の要素の種類を説明し、モジュール、およびcompareと同じ規則に従い比較関数を提供する必要があります。文字の場合、これは次のようになります。

module OrderedChar = struct 
    type t = char 
    let compare = compare 
end 

module CharSet = Set.Make(OrderedChar) 

上記CharSetモジュールはinterface described in the documentationを持っています。集合の要素に

let a = CharSet.add 'a' CharSet.empty 
let ab = CharSet.add 'b' a 
let b = CharSet.remove 'a' ab 
(* /* a, b and ab are three sets containing respectively {a}, {b} and {ab} */ *) 

アクセス:モジュールは、既存の要素を追加または削除することによって、設定から新しいセットを作成する機能を提供しますので、それの要旨は、セットが(リストのような)不変の値であるということですほとんどの場合、存在クエリと反復によって発生します。

+0

私は分かりません。おそらくそうではありません。あなたのアルゴリズムでは、文法をセットに格納する必要がありますか? –

+2

FYI、OCamlでの標準ライブラリを設定し、地図で使用されるインタフェースに準拠 'Char'モジュールがあります。http://caml.inria.fr/pub/docs/manual-ocaml/libref/Char.html –

関連する問題