Как правильно использовать принуждения, чтобы не было скобок?

Почему следующая грамматика не распознает nat -> nat но признает (nat -> nat) и как я могу это исправить?

 TNat . Typ4 ::= "nat" ;                                                        
 TVoid . Typ4 ::= "<>" ;    
 TProd . Typ3 ::= SumType;                                
 TProd . Typ2 ::= Typ2 "*" Typ3;                                                
 TArrow . Typ1 ::= Typ1 "->" Typ2;                                              
 coercions Typ 4;      

1 ответ

Решение

Инвертирование порядка объявления исправило проблему

TArrow . Typ ::= Typ "->" Typ1;
TSum . Typ1 ::= SumType;
TProd . Typ2 ::= Typ2 "*" Typ3;
TNat . Typ3 ::= "nat" ;
TVoid . Typ3 ::= "<>" ;
coercions Typ 3;
Другие вопросы по тегам