Мне нужно построить грамматику с предопределенными идентификаторами, но разрешить создание объекта с тем же идентификатором. Например, мне нужно было бы написать:
Number empty;
...
A->B: empty
Как и без объявления: A->B: empty
пусто - это в моей грамматике зарезервированный идентификатор, но который может быть объявлен или не. Моя цель состоит в том, чтобы: если я делаю пустой пустой явно, грамматика должна рассматривать следующую «пустую» как ссылку. Текущий фрагмент грамматики выглядит следующим образом:
Number:
name=NumID;
NumberReservedID:
'empty';
NumID:
ID | NumberReservedID;
NumberRef:
ref=[Number|NumID]|NumberReservedID
Я заметил, что если я поставлю ref = [Number | NumID], любое использование «пусто» будет ссылкой, но я должен объявить или будет выделено как не найденное.
Если я поставлю ref = [Number], альтернативный NumberReservedID вступит во владение, и любое «пустое» использование будет строкой, а не ссылкой на объявление.
Есть ли у вас какие-либо идеи, как разрешить переопределение зарезервированных идентификаторов при сохранении согласованности ссылок?
Заранее спасибо!