90 lines
1.8 KiB
Go
90 lines
1.8 KiB
Go
package frontend
|
|
|
|
// Equals checks deep equality of the two trees
|
|
func (c *Concat) Equals(o AST) bool {
|
|
if x, is := o.(*Concat); is {
|
|
if len(c.Items) != len(x.Items) {
|
|
return false
|
|
}
|
|
for i := range c.Items {
|
|
if !c.Items[i].Equals(x.Items[i]) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Equals checks deep equality of the two trees
|
|
func (a *AltMatch) Equals(o AST) bool {
|
|
if x, is := o.(*AltMatch); is {
|
|
return a.A.Equals(x.A) && a.B.Equals(x.B)
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Equals checks deep equality of the two trees
|
|
func (a *Alternation) Equals(o AST) bool {
|
|
if x, is := o.(*Alternation); is {
|
|
return a.A.Equals(x.A) && a.B.Equals(x.B)
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Equals checks deep equality of the two trees
|
|
func (m *Match) Equals(o AST) bool {
|
|
if x, is := o.(*Match); is {
|
|
return m.AST.Equals(x.AST)
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Equals checks deep equality of the two trees
|
|
func (s *Star) Equals(o AST) bool {
|
|
if x, is := o.(*Star); is {
|
|
return s.AST.Equals(x.AST)
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Equals checks deep equality of the two trees
|
|
func (p *Plus) Equals(o AST) bool {
|
|
if x, is := o.(*Plus); is {
|
|
return p.AST.Equals(x.AST)
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Equals checks deep equality of the two trees
|
|
func (m *Maybe) Equals(o AST) bool {
|
|
if x, is := o.(*Maybe); is {
|
|
return m.AST.Equals(x.AST)
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Equals checks deep equality of the two trees
|
|
func (c *Character) Equals(o AST) bool {
|
|
if x, is := o.(*Character); is {
|
|
return *c == *x
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Equals checks deep equality of the two trees
|
|
func (r *Range) Equals(o AST) bool {
|
|
if x, is := o.(*Range); is {
|
|
return *r == *x
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Equals checks deep equality of the two trees
|
|
func (e *EOS) Equals(o AST) bool {
|
|
if x, is := o.(*EOS); is {
|
|
return *e == *x
|
|
}
|
|
return false
|
|
}
|