バージョン

終端記号 (Syntax Parsing Engine)

トピックの概要

目的

このトピックは、文章校正の終端記号を説明します。

前提条件

このトピックを理解するためには、以下のトピックを理解しておく必要があります。

トピック 目的

このトピックは、Syntax Parsing Engine の概要を示します。

このトピックは、Syntax Parsing Engine の文章校正の概要を示します。

このグループのトピックでは、Syntax Parsing Engine が行う字句解析について説明します。

このトピックの内容

このトピックは、以下のセクションで構成されます。

終端記号の概要

終端記号は、字句アナライザーがトークン作成時にユニットとして認識する文字グループを定義します。パーサーが他の記号と区別することができる一意の名前に加えて、場合によっては示すことができるテキストも定義します。たとえば、「;」のみを表すことができる「SemicolonToken」という名前の終端記号や、後ろにゼロまたはその他のアンダースコア、文字または数字が続くアンダースコアまたは文字を表すことができる「IdentifierToken」という名前の終端記号が、文章校正にあるかもしれません。

終端記号は Infragistics.Documents.Parsing 名前空間の TerminalSymbol クラスで表されます。

終端記号の定義

LexerState には、その状態にある場合にレクサーによって一致できる TerminalSymbol インスタンスを含む Symbols コレクションがあります。Symbols コレクションは、TerminalSymbol インスタンスを含むことに加えて、TerminalSymbol が公開用コンストラクターを持たないため新しい TerminalSymbol が作成される手段でもあります。以下は、TerminalSymbol を作成するSymbols コレクション上の追加メソッドのシグニチャです。

C# の場合:

public TerminalSymbol Add(
    string name,
    string value = null,
    TerminalSymbolComparison comparison = TerminalSymbolComparison.Literal,
    bool isExitSymbol = false)

注:

Note

TerminalSymbol インスタンスを取得する Symbols コレクションに 追加メソッドがもう 1 つあります。複数のレクサー状態に TerminalSymbol を追加するために使用できます。1 つの LexerState に作成でき、その後、作成されたインスタンスは同じ Grammar 内の別の LexerState に追加できます。このようにして、TerminalSymbol は複数のレクサー状態に一致することができます。

正規表現のサポート

Symbols コレクションの追加メソッドにおいて、新しい TerminalSymbol で指定された比較が RegularExpression の場合、値パラメータは正規表現文字列として解釈されます。正規表現は、一連の文字列の簡潔な説明を許可します。

基本機能

式のリテラル文字列に加え、より大きく複雑なセットを定義するために正規表現を組み合わせ強化するのに使用することができる特定の演算子があります。以下は、Syntax Parsing Engine によってサポートされる非常に基本的な正規表現機能を分割したものです。

コンストラクト 説明 実例によって記述される文字列セット

リテラル文字

別の種類のコンストラクトとして予約されないリテラル文字これは、その文字のみのある文字列からなるセットを表します。

{ "A" }

(expression)

グループ化カッコ内に正規表現をグループ化し、その表現で記述されるセットを変更しません。

(A)

{ "A" }

expression1|expression2

代替。「|」によって分割される 2 つの正規表現最初または次の表現によって記述されるすべての文字列のセットを表します。

A

B

{ "A", "B" }

expression1 expression2

連結別の正規表現が後ろに続く正規表現最初の式セット内のすべての文字列のセットが、2 つめの式セット内のすべての文字列と連結することを表します。

(A|B)C

{ "AC", "BC" }

expression*

クリーネ閉包後ろに「*」が続く正規表現「* 」の前の式によって記述されるセットの 0 個以上の連結を表します。

(A|B)*

機能のサポート

Syntax Parsing Engine は、 .NET Framework Regular Expressions と同じ構文に準拠しますが、その機能のサブセットのみをサポートします。これにより、特定の正規表現を定義する能力のコストで、より高速な字句解析が可能になります。以下は、.NET Framework 正規表現機能および現在解析エンジンによってサポートされている機能のリストです (このリストは MSDN から取得したものであり、 こちらで閲覧可能)。

機能 説明 Syntax Parsing Engine でのサポートの有無

\a

ベル文字 \u0007 に一致します。

Yes.png

\b

文字クラスでは、バックスペース \u0008 に一致します。

Yes.png

\t

タブ \u0009 に一致します。

Yes.png

\r

キャリッジリターン \u000D に一致します。

Yes.png

\v

垂直方向のタブ \u000B に一致します。

Yes.png

\f

フォーム フィード \u000C に一致します。

Yes.png

\n

新しい線 \u000A に一致します。

Yes.png

\e

エスケープ \u001B に一致します。

Yes.png

\*nnn

8 進数表現を使用して文字を指定します (nnn は 2 桁以上から構成)。

Yes.png

\x nn

16 進数表現を使用して文字を指定します (nn は 2 桁で構成)。

Yes.png

\c X

\c x

X で指定される ASCII 文字に一致します。X または x は制御文字です。

No.png

\u nnnn

16 進数表現を使用することによる一意な文字に一致します (nnnn と表現されるように 4 桁)。

Yes.png

\

このトピック内のこの表におけるエスケープ文字として認識されない文字が続く場合、その文字に一致します。たとえば、[]$$$$* は \x2A と同じであり \.\x2E と同じです。これにより、正規表現エンジンは言語要素 (* や ? など) および文字リテラル ([]$$* $$ または \?) の曖昧さをなくすことができます。

Yes.png

[ character_group ]

character_group 内のいずれかの単一の文字に一致します。デフォルトでは、一致において大文字と小文字を区別します。例: [ae]

Yes.png

[^ character_group ]

否定: character_group にない単一の文字に一致します。デフォルトでは、 character_group 内の文字は大文字小文字を区別します。例: [^ae]

Yes.png

first - last

文字の範囲: 最初から最後までの範囲内の単一の文字に一致します。文字グループまたは否定の文字グループ内でのみ使用できます。

Yes.png

.

ワイルドカード: \n 以外の単一の文字に一致します。

リテラルのピリオド文字 (. または \u002E) に一致させるには、その前にエスケープ文字 (\.) を付けなければなりません。

Yes.png

\p{ name }

Unicode 全般カテゴリ内の単一文字、または name により指定される名前付きブロックに一致します。例: \p{IsCyrillic}

Yes.png

\P{ name }

Unicode 全般カテゴリ内にない単一文字、または name により指定される名前付きブロックに一致します。例: \P{Lu}

Yes.png

\w

いずれかのワード文字に一致します。

Yes.png

\W

いずれかの非ワード文字に一致します。

Yes.png

\s

いずれかの空白文字に一致します。

Yes.png

\S

いずれかの非空白文字に一致します。

Yes.png

\d

いずれかの 10 進数数字に一致します。

Yes.png

\D

10 進数数字以外の文字に一致します。

Yes.png

^

文字列または線の先頭で一致は開始しなければなりません。

No.png

$

一致は文字列の最後に、または線または文字列の最後で \n の前に発生しなければなりません。

No.png

\A

一致は文字列の先頭で発生しなければなりません。

No.png

\Z

一致は文字列の最後に、または文字列の最後で \n の前に発生しなければなりません。

No.png

\z

一致は文字列の最後で発生しなければなりません。

Yes.png

\G

一致は、前の一致が終了した時点で発生しなければなりません。

No.png

\b

一致は、\w (英数字) 文字と \W (非英数字) 文字の間の境界線で発生しなければなりません。

No.png

\B

一致は、\b 境界線で発生してはなりません。

No.png

( 部分式 )

一致した部分式を取得し、ゼロから始まる序数に割り当てます。

Yes.png

(?< name > subexpression )

一致した部分式を名前付きグループにキャプチャします。

No.png

(?< name1 - name2 > subexpression )

バランスをとるグループ定義を定義します。

No.png

(?: subexpression )

キャプチャしない グループを定義します。

Yes.png

(?:imnsx-imnsx: subexpression )

部分式内で指定したオプションを適用または無効にします。使用可能なオプション:

  • i - 大文字小文字を区別する一致を使用します。

  • m - 複数行モードを使用します。^ および $ は、文字列の先頭と末尾でなく線の先頭と末尾に一致します。

  • n - 名前のないグループはキャプチャしません。

  • s - 単一行モードを使用します。

  • x - 正規表現パターンの中でエスケープされない空白を無視します。

Note

(ただしオプション i のみ)

(?= subexpression )

ゼロ幅の正の先読みアサーション

No.png

(?! subexpression )

ゼロ幅の負の先読みアサーション

No.png

(?<= subexpression )

ゼロ幅の正の後読みアサーション

No.png

(?<! subexpression )

ゼロ幅の負の後読みアサーション

No.png

(?> subexpression )

非バックトラッキング (または「欲張り」) 部分式

No.png

*

以前の要素にゼロ回以上一致します。例: \d*\.\d

Yes.png

+

以前の要素に 1 回以上一致します。

Yes.png

?

以前の要素にゼロ回または 1 回一致します。

Yes.png

{ n }

以前の要素に n 回一致します。例: ,\d{3}

Yes.png

{ n ,}

以前の要素に n 回以上一致します。

Yes.png

{ n , m }

以前の要素に n 回以上、m 回未満一致します。

Yes.png

* ?

以前の要素にゼロ回以上一致しますが、できるかぎり少なくします。

No.png

+?

以前の要素に 1 回以上一致しますが、できるかぎり少なくします。

No.png

??

以前の要素にゼロ回または 1 回一致しますが、できるかぎり少なくします。

No.png

{ n }?

先行要素に n 回一致します。

No.png

{ n ,}?

先行要素に n 回以上一致しますが、できるかぎり少なくします。

No.png

{ n , m }?

以前の要素に n 回から m 回一致しますが、できるかぎり少なくします。

No.png

\ number

後方参照番号付き部分式の値に一致します。例: (\w)\1

No.png

\k< name >

名前付き後方参照名前付き式の値に一致します。例: (?<char>\w)\k<char>

No.png

|

縦棒 (|) 文字で分割されたいずれかの 1 つの要素に一致します。例: th(e|is|at)

Yes.png

(?( expression ) yes | no )

expression によって指定された正規表現パターンが一致する場合は yes に一致します。そうでない場合はオプションの no 部分に一致します。expression は、ゼロ幅アサーションとして解釈されます。例: (?(A)A\d{2}\b|\b\d{3}\b)

No.png

(?( name ) yes | no )

名前、名前付きまたは番号付きのキャプチャグループに一致がある場合は yes、そうでない場合はオプションの no に一致します。例: (?<quoted>")?(?(quoted).?"|\S\s)

No.png

(?# comment )

インライン コメントコメントは最初の終わりかっこで終わります。

Yes.png

# [to end of line]

X モードのコメントコメントはエスケープされない # で開始し、行の終わりまで続きます。

No.png

関連コンテンツ

トピック

このトピックの追加情報については、以下のトピックも合わせてご参照ください。

トピック 目的

このトピックは、文章校正の非終端記号について説明します。

このグループのトピックでは、Syntax Parsing Engine が行う構文解析について説明します。

このグループのトピックでは、Syntax Parsing Engine が実施する文章校正解析について説明します。