簡體   English   中英

樹梢忽略語法中定義的方法

[英]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)

另一方面, decimalto_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM