gpt4 book ai didi

ruby - 树顶 SGF 解析

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:18 26 4
gpt4 key购买 nike

我目前正在尝试编写一个 Treetop 语法来解析简单游戏格式文件,并且到目前为止它大部分都在工作。但是,出现了一些问题。

  1. 我不确定如何实际访问 Treetop 在解析后生成的结构。
  2. 有没有比我的字符规则更好的方法来处理捕获所有字符?
  3. 有些评论我似乎无法正确书写。

    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_/\-:;|'"\\<>(){}!@#$%^&\*\+\-,\.\?!= \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])")

最佳答案

  1. 该结构作为 SyntaxNodes 树返回给您(如果结果为 nil,请检查 parser.failure_reason)。您可以遍历这棵树,或者(推荐这样做)您可以使用执行您想要的操作的函数来扩充它,并且只需在根上调用您的主要函数。

如果您的意思是“如何从节点函数中访问组件?”有几种方法。您可以使用 element[x] 符号或规则来获取它们:

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 ) ")" ...

然后按名称引用它们。

  1. 如果您只想匹配那些字符,您的字符规则看起来不错。如果您想匹配任何字符,您可以像在正则表达式中一样使用点 (.)。

  2. 我不熟悉您要解析的语言,但您要查找的规则可能类似于:

rule comment
"C" balanced_square_bracket_string
end
rule balanced_square_bracket_string
"[" ( [^\[\]] / balanced_square_bracket_string )* "]"
end

第二条规则的中间部分匹配任何非方括号或带 balanced_square 括号的嵌套字符串。

附言有一个相当活跃的Google group , 具有在线和可搜索的文件。

关于ruby - 树顶 SGF 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com