Я получаю сообщение об ошибке синтаксиса для кода ниже. Сообщение обозначает отмеченную позицию в утверждении addLocal, утверждая: «Синтаксическая ошибка в строке 30, столбце 9: здесь может появиться 1 лексема:)» Я просто не вижу, что здесь не так.
abstract sig Target{}
sig Addr extends Target{}
sig Name extends Target{}
sig Book
{
addr: Name->Target
}
pred add(b, b1:Book, n:Name, t:Target)
{
b1.addr = b.addr + (n->t)
}
fun lookup (b: Book, n: Name): set Addr
{
n.^(b.addr) & Addr
}
assert addLocal
{
all
b,b1:Book,
n,n1:Name,
t:Target |
add(b, b1, n, t) and n != n1 => lookup(b, n1) = lookup(b1, n1)
// |- error position
}