現在、Treetop文法を書いてSimple Game Formatファイルを解析しようとしています。しかし、いくつか質問があります。Treetop SGF Parsing
- 私は、ツリートップが実際にパースした後に生成する構造に実際にアクセスする方法がわかりません。
- 私のcharsルールよりもすべての文字をキャプチャするより良い方法はありますか?
コメントが正しく書かれていないような場合があります。
C [player1 [4K \]:HI player2 [3K \]:!HI]
私はC []ノードの入れ子構造にどのように対処するかのまわりで私の頭をラップすることはできませんそれらの中に[]があります。
以下は私の現在の進捗状況です。
SGF-grammar.treetop
grammar SgfGrammar
rule node
'(' chunk* ')' {
def value
text_value
end
}
end
rule chunk
';' property_set* {
def value
text_value
end
}
end
rule property_set
property ('[' property_data ']')*/property '[' property_data ']' {
def value
text_value
end
}
end
rule property_data
chars '[' (!'\]' .)* '\]' chars/chars/empty {
def value
text_value
end
}
end
rule property
[A-Z]+/[A-Z] {
def value
text_value
end
}
end
rule chars
[a-zA-Z0-9_/\-:;|'"\\<>(){}[email protected]#$%^&\*\+\-,\.\?!= \r\n\t]*
end
rule empty
''
end
end
そして、私のテストケース、現在上記のネストされたブラケット問題言及とC []ノードを除く:
example.rbを
require 'rubygems'
require 'treetop'
require 'sgf-grammar'
parser = SgfGrammarParser.new
parser.parse("(;GM[1]FF[4]CA[UTF-8]AP[CGoban:3]ST[2]
RU[Japanese]SZ[19]KM[0.50]TM[1800]OT[5x30 byo-yomi]
PW[stoic]PB[bojo]WR[3k]BR[4k]DT[2008-11-30]RE[B+2.50])")
これはほぼ一年後に読んだ人の誰もが次のようになりました:http://github.com/boj/kantan-sgf - 世界で最も効率的なものではありませんが、優れたTreeTop/SGF解析でした実験。 – bojo