MPS 2020.3 ヘルプ

正規表現言語

正規表現は広く使われている最も初期の DSL の 1 つです。最近のほとんどすべての現代のプログラミング言語は、何らかの形で正規表現をサポートしています。MPS も例外ではありません。MPS の正規表現のサポートは、基本言語の拡張を通じて実装されています。

また、正規表現クックブックをチェックして、その言語をさらに徹底的に紹介することをお勧めします。

正規表現を定義する

Regexp language allows you to create an instance of java.util.regex.Pattern class using a special pattern expression: /regexp/ . In the generated code, MPS creates for each defined pattern expression a final static field in the outermost class, so the pattern is compiled only once during application runtime.

Pattern pattern = /[a-z]+/

3 つのオプションがあり、正規表現の最後のスラッシュの後に追加できます。

/i

大文字と小文字を区別しないマッチング

/s

文字列を単一行として扱い、ドット文字クラスは改行セパレーターを含みます

/m

複数行モード: ^ および $ 文字は、文字列内の任意の行に一致します (文字列の先頭または末尾ではなく)

エディターで文字を入力または削除するか、インスペクタを使用してオプションをオンまたはオフにできます。生成された正規表現のプレビューはインスペクタで利用できます。

定義を再利用する

プロジェクト全体で頻繁に使用されるパターンに正規表現を再利用するには、別のルートを作成します。

モデル -> 新規 -> jetbrains.mp.baseLanguage.regexp-> 正規表現

それぞれの再利用可能な正規表現は名前と、必要に応じて説明を持つべきです。

regexp Identifier { // no description (identifier: [a-z A-Z _] [a-z A-Z _ 0-9]+) }

パターンマッチ演算子

The =~ operator returns true if the string matches against the specified pattern.

"string or variable" =~ /regexp/

テキストをキャプチャーする

式の中で括弧をオプションで使用すると、キャプチャーグループが作成されます。後でそのグループを参照できるようにするには、名前を付けることをお勧めします。

/^ (name: [a-z A-Z _] [a-z A-Z _ 0-9]+) /

if ("any string" =~ /^ # define (identifier: [a-z A-Z _] [a-z A-Z _ 0-9]+) /) { process(identifier); }

If the pattern matches against the string, the matched value is captured into identifier and can be accessed in the if-block.

さらに徹底的に言語を紹介するために、正規表現クックブックをチェックしてください。

関連ページ:

正規表現

正規表現言語の概要:導入正規表現言語(テキスト操作を大幅に簡素化する言語)は、現在最も使用されているドメイン固有の言語の 1 つです。ほとんどすべての開発者が少なくとも 1 回は使用しています。Perl や Python などの一部の言語には、サポートが組み込まれています。Java などの一部は、ライブラリを介して使用します。MPS の実装に使用する言語である Java には、正規表現の言語レベルのサポートがないため、DSL を実装するのが自然であったため、正規表現ライブラリの代わりに DSL...

生成コードからのソースの削除

MPS は、デフォルトで生成されたモデルにソースをバンドルします。モデルのユーザーは、コードで使用している概念の定義に移動できます。たとえば、singleControl + クリックするだけで、呼び出しているメソッドやインスタンス化しているクラスの実装を確認できます。これは、実装側を覗くだけで言語 / ライブラリ作成者のアイデアの多くを把握できるため、ユーザーにとって非常に便利です。ただし、実装を非表示にすることが望まれる場合もあります。特にクローズドソースプロジェクトは、実装に含まれる知的財産...

型拡張メソッド

言語jetbrains.mps.extensionMethodsは、Java の静的メソッドと同じように、新しく定義されたメソッドまたはオーバーライドされたメソッドで有効な MPS 型を拡張する方法を提供します。"This is an ordinary string with a surpricin