1
語法期間分析器,堆棧管理這是關係到Custom objects in ParseKit Actions用行動
如果我有一個語法規則,如第二個問題:
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」。會匹配正確,但數據庫名稱將是零謝謝! – utahwithak
是的,你絕對正確。我肯定會打破這一點,以更容易地處理特定於數據庫的名稱的存在或不存在。 –