1
아래 코드에 대한 구문 오류 메시지가 나타납니다. 메시지는 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
}
답변 해 주셔서 감사합니다. –
나는 대괄호가 선언에서도 받아 들여지고 있음을 발견했다 :'pred add [b, b1 : Book, n : Name, t : Target] {}' –