// Package grammar is used for parsing a stream of runes according to a set of // grammatical rules. This package only supports context-free grammars. package grammar import "fmt" // Stringer is a convenience tool for working with fmt.Stringer. Exactly one of // the fields must be set, and will be used to implement the fmt.Stringer // interface. type Stringer struct { I fmt.Stringer F func() string S string } func (s Stringer) String() string { switch { case s.I != nil: return s.I.String() case s.F != nil: return s.F() case s.S != "": return s.S default: panic("no fields set on Stringer") } }