Ruby 树顶SGF解析
我目前正在尝试编写一个树顶语法来解析简单的游戏格式文件,到目前为止,它基本上可以正常工作。然而,出现了一些问题Ruby 树顶SGF解析,ruby,parsing,treetop,Ruby,Parsing,Treetop,我目前正在尝试编写一个树顶语法来解析简单的游戏格式文件,到目前为止,它基本上可以正常工作。然而,出现了一些问题 我不确定如何实际访问Treetop在解析后生成的结构 有没有比我的角色规则更好的抓取所有角色的方法 有一种情况是,我的评论似乎写得不对 C[player1[4k\]:hi player2[3k\]:hi!] 我不知道如何处理C[]节点的嵌套结构,其中包含[] 以下是我目前的进展 sgf语法。树梢 grammar SgfGrammar rule node '(' chunk* '
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_/\-:;|'"\\<>(){}!@#$%^&\*\+\-,\.\?!= \r\n\t]*
end
rule empty
''
end
end
rule url_prefix
protocol "://" host_name {
def example
assert element[0] == protocol
assert element[2] == host_name
unless protocol.text_value == "http"
print "#{protocol.text_value} not supported"
end
end
}
您也可以这样命名它们:
rule phone_number
"(" area_code:( digit digit digit ) ")" ...
然后用名字来指代他们
另外,还有一个相当活跃的网站,可以在线搜索存档。感谢MarkusQ提供的提示。我会继续思考这个问题,但你让我朝着正确的方向前进。几乎一年后,任何人读到这篇文章,结果都是:-这不是世界上最有效的东西,但却是一个伟大的TreeTop/SGF解析实验。
rule phone_number
"(" area_code:( digit digit digit ) ")" ...
rule comment
"C" balanced_square_bracket_string
end
rule balanced_square_bracket_string
"[" ( [^\[\]] / balanced_square_bracket_string )* "]"
end