问题描述
我有这个词素:
extract(r_raster,sp,fun=mean,na.rm=T,weights=TRUE)
# ra rb
#[1,] 10 35
#[2,] 10 35
#[3,] 10 35
extract(r_terra,sv,weights=TRUE)
# ID ra rb
#[1,] 1 10 35
#[2,] 2 10 35
#[3,] 3 10 35
还有这个 PEGjs 语法:
install.packages('terra',repos='https://rspatial.r-universe.dev')
在语法中,我正在解析一个函数调用。这目前正在解析,您可以try online in the PEGjs playground。
输入解析成功。
a().length()
然后输入解析失败:
第 1 行,第 13 列:应为“(”或“.”,但发现输入结束。
我不明白为什么。来自the documentation:
expression * 匹配零个或多个重复的表达式,并在数组中返回它们的匹配结果。匹配是贪婪的
这应该是 start = func_call
func_call = header "(" ")"
header = "a" suffix*
suffix = "(" ")" ("." "length")
的贪婪匹配,应该匹配一次。但相反,它根本不匹配。这与 suffix = "(" ")" ("." "length")*
中 "." "length"
的嵌套使用有关吗?
解决方法
*
匹配零 个或更多重复的操作数,如您所说。
所以当你写
suffix = "(" ")" ("." "length")*
您是说后缀是 ()
后跟 零 或多次重复的 .length
。因此它可能是 ()
,它的重复次数为零。
因此,suffix•
可以匹配 ().length()
作为 suffix
的两次重复,首先是 ().length
,然后是 ()
。那将是贪婪匹配,这是 PEG 的操作方式。
但在那之后,就没有 ()
可以被 func_call
匹配了。因此出现解析错误。