Это второй вопрос, связанный с Custom objects in ParseKit Actionsуправление Parser Stack во время грамматике с действиями
Если бы я имел правило грамматики, такие как:
qualifiedTableName = (databaseName '.')? tableName (('INDEXED' 'BY' indexName) | ('NOT' 'INDEXED'))?;
Правомерно предположить, что действие не будет называться пока это правило не будет согласовано? Таким образом, в этом случае, когда действие вызывается в стек, может выглядеть так:
possibly:
|'INDEXED'
|'NOT'
or:
|indexName (A custom object possibly)
|'BY'
|'INDEXED
|tableName (for sure will be here)
and possibly these
|'.' (if this is here I know the database name must be here) if not push last one on?
|databaseName
--------------(perhaps more things from other rules)
Эти правильные оценки? Есть ли другая документация по действиям? Я знаю, что это в значительной степени основано на Antlr, но его тонкие различия, которые могут действительно вызвать у вас проблемы.
Для моего собственного понимания было бы целесообразно также изменить правило 'name', чтобы следовать тому же более гранулированному подходу вытащить значение' (databaseName '.')? 'Поскольку вы могли бы потенциально появиться нулевой объект. Или это нормально? например, разбор вашего примера без «mydb». будет правильно соответствовать, но имя dbname было бы nil Спасибо! – utahwithak
Да, вы абсолютно правы. Я бы определенно нарушил это, чтобы упростить обработку присутствия или отсутствия имени, специфичного для db. –