2016-06-15 66 views
1

Here是PLSQL的Antlr語法文件。Antlr PLSQL語法無法正確解析包名?

但是,它並不完全正確。例如,我有開頭的軟件包:

CREATE OR REPLACE PACKAGE BODY SCHEMA_NAME.PACKAGE_NAME AS 

從前面的語法文件生成解析器不解析SCHEMA_NAME.PACKAGE_NAME作爲package_namepackage_name是ANTLR的解析器規則)。

爲了解決這個問題,我已經改變了這個

package_name 
    : id 
    ; 

對此

package_name 
    : id ('.' id)? 
    ; 

我也曾嘗試

package_name 
    : id ('.' id_expression)? 
    ; 

,但沒有一次成功。 Antlr仍不會包含package name中的最後.PACKAGE_NAME部分。

爲什麼這不起作用?我怎樣才能解決這個問題?

+0

如果其餘的規則有任何跡象,你實際上需要':id('。'id_expression)?'(儘管這不應該改變在這種情況下被識別的東西)。 –

+0

@JeroenMostert我也嘗試過。那也行不通。 – Utku

+1

我會說,它不工作,因爲它是Antlr3語法的一個端口。它尚未完成。這個語法的另一個問題是,它試圖一次解析PL/SQL,SQL和DDL語言。但是這些語法應該在下面使用不同的Lexer。 – ibre5041

回答

1

這樣的包定義:

package_name 
    : id ('.' id_expression)? 
    ; 

與下一個PL/SQL查詢工作良好:

CREATE OR REPLACE PACKAGE BODY SCHEMA_NAME.PACKAGE_NAME AS END; 

我想你在最後忘記END和分號。

此外,如果您發現錯誤,請向正式ANTLR語法庫添加問題或請求,因爲此PL/SQL語法未完成,因爲它已在評論中提及。