Oマークアップ言語
本稿ではOマークアップ言語 (O Markup Language; OML) を規定します。
左右で対をなすアスキーの記号の文字
(<[{ (}]>))
を左(右)嘴とします。
それ以外のアスキーの記号の24種類の文字
!"#$%&'*+,-./:;=?@\^_`|~
を眼とします。
空文字は、文字コードが対応していれば置換文字で置き換え、そうでなければ除きます。
表す文書はノードの系列よりなります。 要素は文字列である札と0以上の子ノードの系列を持ちます。 ノードはテキストないし要素です。 要素の入れ子は深さ32以上です。 左頭は嘴と眼を、右頭は眼と嘴をこの順で持ちます。 左右の頭が合致するのは嘴と眼が一致するときです。 語彙を頭から札への対応付けとします。 解析中に語彙を変更する特別な要素を語彙変化とします。
構文解析では左頭が右頭に優越します。 左頭になるのは、最初のものと語彙変化内では常に、 それ以外では語彙にその頭が含まれるときです。
右頭になるのはまだ閉じない最も近い左頭に合致するときで、 間のすべてを子ノードの系列として要素を構成します。 子ノードの系列にまだ閉じない左頭があれば、 右頭の直前にこの左頭に合致する右頭があると仮定して同様にします。
語彙変化の子ノードの系列において、 最初にテキストを持つ要素があれば左頭から札への対応付けを語彙に加えます。 最初に要素を持つ要素があれば語彙での札を内側から外側の左頭へ移します。
以上で言語が規定されました。以降は非規範的な内容です。
実例
本節では実例を示します。 ここではJSONによる出力を併記します。 これにより、本文書を使った適合性試験を行えます。 JSONによる出力は抽象構文木を表す次のJSONスキーマにしたがいます。
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:local:oml-ast.schema.json",
"title": "Sample AST",
"type": "array",
"items": { "$ref": "#/$defs/node" },
"$defs": {
"node": {
"anyOf": [
{ "type": "string" },
{ "$ref": "#/$defs/element" }
]
},
"element": {
"type": "object",
"properties": {
"label": { "type": "string" },
"children": {
"type": "array",
"items": { "$ref": "#/$defs/node" }
}
},
"required": ["label", "children"],
"additionalProperties": false
}
}
}
語彙になければ要素になりません。
<! !>(+a+)
["(+a+)"]
最小の語彙変化です。
<!(*a*)!>(*b*)
[{"label":"a","children":["b"]}]
要素の頭が移ると、元の語彙はなくなります。
<! (+a+) (*(+ *) !>(+b+)(*c*)
["(+b+)",{"label":"a","children":["c"]}]
語彙変化も別の頭に変更できます。
<! <?<! ?> !><?(+a+)?><!b!>(+c+)
["<!b!>",{"label":"a","children":["c"]}]
閉じていない左頭は文書の終わりで閉じます。 この場合、語彙変化であるため空になります。
<!
[]
変更履歴
2026年8月19日に第9版としました。 2番目の眼を省きました。 要素内の空白をなくしました。 要素が構成される条件を変更しました。 空文字の扱いを追記しました。 語彙変化の既定の左頭を固定から変更しました。 5月21日に本言語および参照実装を一般公開しました。 2025年4月27日に本言語の頭字語をOMLにしました。 2023年5月21日に第1版が書かれました。 着想の元となったのはTeX、XML、Djotです。使用許諾
Copyright (C) 2023-2026 gemmaro.
Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty.