Şu anda Simple Game Format dosyalarını ayrıştırmak için bir Treetop dilbilgisi yazmaya çalışıyorum ve çoğunlukla şu ana kadar çalışıyorum. Ancak, ortaya çıkan birkaç soru var.Treetop SGF Ayrıştırma
- Treetop'un bir ayrıştırmadan sonra oluşturduğu yapıya gerçekten nasıl erişeceğinden emin değilim.
- Tüm karakterleri yakalamak için benim karakter kuralımdan daha iyi bir yol var mı?
Doğru yazamadığım yorumlar için bir durum var.
C [player1 [4k \]: hi player2 [3k \]:! Hi] ben kafamı kaydıramazsınız
nasıl C [] düğümün iç içe yapısıyla başa [] ile onların içinde.
Aşağıdaki işlem şu andaki işlemim.
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
Ve test durumda, şu anda yukarıda belirtilen iç içe dirsek sorun söz C [] düğümleri hariç:
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])")
Neredeyse bir yıl sonra bunu okuyan herkes bunun sonucunu verdi: http://github.com/boj/kantan-sgf - Dünyadaki en verimli şey değil, ama büyük bir TreeTop/SGF ayrıştı. deney. – bojo