如何链接类及其后代的对象实例?

问题描述

我试图代表解析器项目的生产规则。从此以后,Class的实例化对象应该是可链接的,从而保留Class的方法调用的左关联结果。

遗憾的是,结果远非预期。

我首先希望将其作为列表的元素,而不是空的Array对象。

class GrammarSymbol < Array
  attr_accessor :name,:grammar_symbols,:alternatives
  def initialize(name)
    @name = name
    @grammar_symbols ||= []
    @alternatives ||= []
  end
  
  def +(grammar_symbol)
    @symbols.push(grammar_symbol)
    self
  end
       
  def |(grammar_symbols)
    @alternatives.push(grammar_symbols)
    self
  end

如何进行链接

(NonTerm = (a + ( b + ( c ) 
end

示例输出

2.7.0 :078 > a = GrammarSymbol.new("foo"),b = GrammarSymbol.new("bar"),c = GrammarSymbol.new("baz")
2.7.0 :079 > a + b + c | a | a + b
 => [[]] 
2.7.0 :080 > a + b + c
 => [[],[],[]] 

实际上,我什至希望派生终端类和非终端类,或者能够在非终端符号之间添加(+)字符串(反之亦然)

成功实现方法/对象链接用法的失败之处在哪里?

再次尝试,结果仍然“否”

class GrammarSymbol < Array
  attr_accessor :name
  def initialize(name)
    @name = name
    @grammar_symbols ||= []
    @alternatives ||= []
  end
  
  def +(grammar_symbol)
    @grammar_symbols.push(grammar_symbol)
    self
  end
       
  def |(grammar_symbols)
    @alternatives.push(grammar_symbols)
    self
  end
end

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)