问题描述
我试图代表解析器项目的生产规则。从此以后,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 (将#修改为@)