私は単純な後置プログラミング言語を作成しています。構文は次のとおりです。 2 3 add
は、2つの整数2
と3
を一緒に追加します。 "hello, world!" puts
は、文字列"hello, world!"
をSTDOUTに設定します。次のようにtmLanguageシンタックスの強調表示をしないでbeginを強調表示せずにbeginを終了します。
使用できる新しい機能の定義は、行われます。
"fourth_pow"
"This function raises the argument on the top of the stack to the fourth power."
[
dup dup dup mul mul mul
]
def
空白や改行は言語の文法では重要ではありません。これは、上記の定義が"fourth_pow" "..." [ dup dup dup mul mul mul] def
として作成されている可能性があることを意味します(もちろん、これは読みにくい)。
この言語の構文を強調して、上記の定義ステートメントで新しく定義された関数名とdef
キーワードが強調表示されるようにします。
(YAMLフォーマットで).tmLanguage
ファイルからの抜粋です:
definition:
name: "entity.other.function.jux-beta_syntax"
begin: ("([a-zA-Z_][\w]*[?!]?)")
end: (def)
beginCaptures:
'1': {name: "entity.name.function.jux-beta_syntax"}
contentName: "support.constant.jux-beta_syntax"
patterns:
- include: '#comment'
- include: '#quotation_start'
- include: '#quotation_end'
- include: '#string'
- include: '#identifier'
- include: '#integer'
(ファイル全体hereを参照してください)
この「作品」が、それはそのときの終わりを意味しファイル、私は新しい文字列を開始し、それは関数定義であるかのように強調表示されます。これは、#definition
ルールの 'begin'部分が一致するためです。しかし、私が何をしたいのかは、試合が終わると色付けすることだけです。
tmLanguage形式を使用する方法はありますか?