Boost にある Spirit は、EBNF(Extended Backus Naur Form)に似た形式を直接 C++ のコードとして表現することによって、構文解析の機能を提供するライブラリです。
Spirit で使用されている演算子を優先順位でまとめてみました。
Spirit |
Name | EBNF | Spiritでの分類 | Description |
+a |
Positive | a+ | Optional and Loops | 1回以上のマッチ |
*a |
Kleene star | a* | Optional and Loops | 0回以上のマッチ |
!a |
Optional | a? | Optional and Loops | 0回または1回のマッチ |
~a |
Negation | [^...] | charset | C-aにマッチ(Cは文字集合全体) |
a % b |
List | a (b a)* | Optional and Loops | 1回以上の b 区切り a のリストのマッチ。a>>*(b>>a) と同義 |
a - b |
Difference | a - b | Set | a にマッチかつ b にマッチしない。 |
a >> b |
Sequence | a b | Sequencing | a,b の並びにマッチ |
a & b |
Intersection | なし | Set | a,b の両方にマッチ |
a ^ b |
XOR | a - b | b - a | Set | a か b にマッチし両方にはマッチしない。a-b|b-a と同義 |
a | b |
Union,Alternative | a | b | Set | a か b にマッチ |
a && b |
Sequential-and | a b | Sequencing | a,b の並びにマッチ。a >> b と同義 |
a || b |
Sequential-or | (a b) | a | b,(a b?) | b | Sequencing | a,b の並びもしくはどちらかにマッチ。a>>b|a|b,(a>>!b)|b と同義 |
私は git://vcs.aihara.co.jp/logdo.git の xpsed で sed スクリプトを構文解析するために使用しましたが、その後、新しい Spirit V2.1 がリリースされたので改めて試す予定。