Пример #1
0
func (t Token) String(s *syms.SymbolSet) string {
	sp := s.Get(t.ID)
	if sp.IsTerm {
		return fmt.Sprintf("term:`%s`:`%s`", sp.Name, t.Str)
	}
	return fmt.Sprintf("var:`%s`:`%s`", sp.Name, t.Str)
}
Пример #2
0
func (rule Rule) String(syms syms.SymbolSet, dotPos int) string {
	var b bytes.Buffer
	b.WriteString(fmt.Sprintf("%s → ", syms.Get(rule.LHS).Name))
	for i, sid := range rule.RHS {
		if i == dotPos {
			b.WriteString(fmt.Sprintf("•"))
		}
		b.WriteString(fmt.Sprintf("%s ", syms.Get(sid).Name))
	}
	if len(rule.RHS) == dotPos {
		b.WriteString(fmt.Sprintf("• "))
	}
	return b.String()
}