[英]Treetop ignores methods defined in grammar
我正在嘗試使用樹梢解析百分比。 我寫了以下語法:
grammar Numerals
rule percentage
(decimal "%") {
def to_f
decimal.to_f / 100
end
}
end
rule decimal
sign [0-9]+ '.' [0-9]* {
def to_f
text_value.to_f
end
}
end
rule sign
('+'/'-')?
end
end
這正確匹配,但是由於某種原因,結果中缺少根節點上的to_f
方法。
當我檢查tt生成的代碼時,它為百分比節點創建了兩個模塊,其余代碼僅使用其中一個:
module Percentage0
def decimal
elements[0]
end
end
module Percentage1
def to_f
decimal.to_f / 100
end
end
Percentage1永遠不會出現在代碼中的其他任何地方,而Percentage0用於正確的節點
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
r0.extend(Percentage0)
另一方面, decimal
的to_f
方法也可以正常工作(也有兩個模塊,但是都用於擴展節點)。 我找不到它的定義有什么不同,這導致了這一點。
我認為您只需要從根規則中刪除括號即可。
另外,對於十進制規則,您應該在小數點后使用+
而不是*
; 您至少要有一個電話號碼。
grammar Numerals
rule percentage
decimal "%" {
def to_f
decimal.to_f / 100
end
}
end
rule decimal
sign [0-9]+ '.' [0-9]+ {
def to_f
text_value.to_f
end
}
end
rule sign
('+'/'-')?
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.