Esempio n. 1
0
/*
See Algorithm: set.Closure() in package doc
*/
func (this ItemList) Closure(lexPart *ast.LexPart, symbols *symbols.Symbols) ItemList {
	closure := this
	for i := 0; i < len(closure); i++ {
		expSym := closure[i].ExpectedSymbol()
		if regDefId, isRegDefId := expSym.(*ast.LexRegDefId); isRegDefId {
			if !this.ContainShift(expSym.String()) && !symbols.IsImport(regDefId.Id) {
				closure = closure.AddNoDuplicate(NewItem(regDefId.Id, lexPart, symbols).Emoves()...)
			}
		}
	}
	return closure
}