Да, вы правы: statement
может быть assignment
или ProcedureCall
, оба из которых начинаются с правил ident selector
:
assignment = ident selector ":=" expression.
ProcedureCall = ident selector [ActualParameters].
statement = [assignment | ProcedureCall | IfStatement | WhileStatement].
Вы можете сделать это LL(1) удалив assignment
и ProcedureCall
и изменив statement
на:
statement
= [ ident selector (":=" expression | [ActualParameters])
| IfStatement
| WhileStatement
]
.
(не уверен, повлияет ли это на другие правила в вашей грамматике, но, надеюсь, вы поймете, как это сделатьэто LL (1))