これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド fst-compiler-utf8 です。
プログラム:
NAME
fst-compiler、fst-compiler-utf8 - SFST プログラム用の XNUMX つのコンパイラ
SYNOPSIS
fst コンパイラ 文法ファイル [ 出力ファイル ]
fst-コンパイラ-utf8 文法ファイル [ 出力ファイル ]
OPTIONS
-c fst-infl2 で使用されるコンパクトなフォーマットで変換器を保管します。
-l トランスデューサを lowmem 形式で保存します。
-s トランスデューサーの表面と分析層を切り替えます。 このスイッチはで使用する必要があります
使用する注文 fst-infl (fst-infl2、 fst-infl3) 分析ではなく生成のために。
DESCRIPTION
fst コンパイラ 有限状態トランスデューサ プログラムのコンパイラです。 最小化された
で使用できる有限状態トランスデューサ 初日、 fst-infl、 最初の印刷、 fst-比較、
fst-パース、 と fst-格子。 で生成されるコンパクトなトランスデューサ表現
-c フラグは、 fst-infl2、 fstトレイン、 と 最初の一致。 メモリ効率の良い
-l フラグで生成されるトランスデューサ表現は、 最初-
infl3。
最初のプログラム引数は、変換プログラムを含むファイルの名前です。
プログラミング言語については後述します。 XNUMX 番目の引数はファイルの名前です
結果のトランスデューサがバイナリ形式で書き込まれます。 XNUMX 番目の引数が
行方不明、出力はに書き込まれます stdout。
fst-コンパイラ-utf8 とは異なり fst コンパイラ 文字エンコーディングのみ。 fst-コンパイラ-
utf8 ソースファイルのUTF8エンコーディングをサポートしていますが、 fst コンパイラ に使用されます
ASCII コードの拡張である latin8 のような 1 ビット文字コード。 情報
エンコーディングに関する情報は変換器ファイルに保存され、他の SFST プログラムによって使用されます。
FILE 書式
トランスデューサー プログラムは、(オプションの) シーケンスで構成されます。 アルファベット と 変数
単一の定義が続く トランスデューサー 表現 結果を定義する
トランスデューサー。
アルファベット
アルファベットの定義は、キーワード ALPHABET とそれに続く = およびいくつかの変換器で構成されます。
表現例
アルファベット = [az]:[AZ]
このコマンドは、文字列で発生する記号ペアのセットとしてアルファベットを再定義します。
トランスデューサの遷移。 二段演算子、否定演算子、
引用符で囲まれていないピリオドの前には、常にアルファベットの定義が必要です。
Variables
変数には XNUMX つの異なるタイプがあります。 シンボル セッションに variables ハッシュで囲まれています
記号 (#) を使用し、シンボル シーケンス (以下を参照) を値として受け取ります。
#UC# = AZ
#LC# = az
トランスデューサー variables はドル記号で囲まれ、トランスデューサ式を次のように取ります。
値:
$MAP$ = [az]:[AZ]+
$MAP$ = [#LC#]:[#UC#]+
名前が記号 `=' で始まる変数は特別です 契約 変数。 もし
合意変数がトランスデューサ式で複数回発生する場合、常に
同じ値。 次の変換器プログラムを検討してください。
$=1$ = [abc]
$=1$ X $=1$
結果トランスデューサは、文字列 aXa、bXb、および cXc を認識します。 非環状トランスデューサーのみ
(つまり、文字列マッピングの有限セットを持つトランスデューサ) を合意に割り当てることができます。
変数。
シンボル
シンボルは次のいずれかです
- A s 5 のような単一の文字、
- \* や \_ などの引用符
- のような複数文字の記号また(これは常に
山括弧で囲まれている) または
- バックスラッシュの後に数値コードである数字が続く
指定文字
- ヌル記号 <>。
記号列
シンボル シーケンスは、文字、複数文字のシンボル、および文字のシーケンスです。
az \ などの範囲。 .
シンボル範囲
シンボル範囲は次のいずれかです。
- 単一のシンボル
- [A-Za-z] または
- ^ で始まり、[^A-Za-z] のように角括弧で囲まれた記号シーケンス
([a-zA-Z] の補数を指定) または
- ピリオド (アルファベットの任意の記号を表す)
トランスデューサー式
トランスデューサ式 (TE) は、次のように再帰的に定義されます。
- コロンで区切られた XNUMX つのシンボル範囲のペアは TE です。
[az]:[az]
- [az] のような単一のシンボル範囲は TE です。
[az]:[az] の短縮形です。
- 中括弧で囲まれ、コロンで区切られた XNUMX つの記号シーケンスは、
食べた。 {a[bc]}:{def} は a:db:e <>:f | と同等です。 a:dc:e <>:f.
- X と Y が TE の場合、XY は TE です。
(空白は、引用されていない限り無視されます。)
- X が TE の場合、(X) は TE です。
- X op は TE です X は TE であり、op は * (Kleene のスター演算子)、+ のいずれかです
(クリーネのプラス演算子)、または ? (オプション演算子)
-op X は TE です X は TE であり、op はどちらかです! (否定演算子), ^
(ターゲット言語抽出演算子)、_ (ソース言語抽出演算子)、または ^_
(ソースとターゲットの切り替え演算子)。
- X op Y は TE であり、X であり、Y は TE であり、op は & (接続詞) のいずれかです。
演算子), | (分離演算子), || (合成演算子)、または - (減算
オペレーター)
- L x op y R は、L と R が TE の場合、TE であり、x と y はシンボル範囲であり、
op は => (XNUMX レベルの制限)、<= (XNUMX レベルの強制)、または <=> (XNUMX レベルの強制) のいずれかです。
制限と強制)。
- X、L、および R が TE であり、op が ^-> (上向き) の場合、X op L__R は TE です。
置換)、_-> (下向き置換)、/-> (左向き置換) または \-> (右向き置換)
置換)。 さらに、L と R はオートマトンを定義する必要があります (つまり、文字列をマップするもの)
自分自身に)。 これらの演算子は、Karttunen の置換演算子に対応しています。 もし
矢印の後に疑問符 (?) が続く場合、置換はオプションになります。
- X が TE の場合、X << l は TE であり、l は次の形式のいずれかです。
a または a:b の形式で、a と b は単一の文字または記号です。 結果は
ここで、l は X に自由に挿入されます。たとえば、トランスデューサ ab << c は次のようになります。
c*ac*bc* と同等です。
- X op Y L1__R2, ... , LN__RN は、X、Y、L1 から LN および R1 の場合、TE です。
RN までは TE であり、op は => (一般的な制限)、<= (一般的な強制)、^=> のいずれかです。
(一般表面制限)、^<= (一般表面強制)、^<=> (一般表面
制限と強制)、_=> (一般的な深い制限)、_<= (一般的な深い強制)、
_<=> (一般的な深い制限と強制)。 (これらの演算子は次のように実装されました。
Anssi Yli-Jyra による提案)。
- 「fname」は TE です。 コンパイラは fname という名前のファイルを読み取り、
これを line1|line2|line3|... の形式のトランスデューサに変換します。ここで、linex は x 番目の行です。
ファイル。 : と \ 以外のすべての文字は文字どおりに解釈されます (つまり、
オペレーター)。 この TE は通常、ファイルから形態素リストを読み取る場合などに使用されます。
- " " は TE です。コンパイラは、コンパイル済みのトランスデューサを
fname という名前のファイル。 これ
その他の機能
コメントは記号 % で始まり、行末まで続きます。 空白は無視されます
それらが引用されない限り。 行末でない限り、式は行末で終了します。
の前にバックスラッシュがあります。 コマンド
#include "fname"
fname という名前のファイルからソース コードを挿入するために使用できます。 コマンド
RE >> "fname"
ファイル fname に正規表現 RE を格納します。 コマンド
#ホップクロフトを使う
今後、Hopcroft 最小化アルゴリズムを使用するようにコンパイラに指示し、
#デフォルトを使用します
デフォルトの最小化アルゴリズム (Brzozowski) に戻ります。 コマンド
実施例
以下は、単純なトランスデューサ プログラムの例です。 ファイルが「adj-stems」であると仮定すると、
XNUMX行が含まれています
簡単に
遅く
ビッグ
このトランスデューサーは、形容詞の形を簡単に、簡単に、簡単に、そして遅く正確に分析します。
後で、そして最新。
アルファベット = [a-zA-Z] y:ie:<> :<>
$R$ = y<=>i ( :<> e)
$R2$ = e<=><> ( :<> e)
$R$ = $R$ & $R2$
$Stems$ = "adj-stems"
$S$ = $Stems$ ( :<>| :{er}| :{EST(東部基準時})
$S$ || $R$
EXIT ステータス
fst コンパイラ エラーが発生しない限り、0 を返します。
onworks.net サービスを使用してオンラインで fst-compiler-utf8 を使用する