我使用的是JavaCC模擬SQL語法的一小部分,並且在定義密碼時遇到問題。JavaCC:定義*密碼*令牌或語法規則
我書面方式語法規則的
CREATE USER user_name IDENTIFIED BY a_password
語句,我被困。由於密碼可以與任何類似asdkj*[email protected]#
或[email protected]%^%ASDjnkj
,[email protected]#&
等匹配。請注意,在Oracle中,輸入不帶單引號('
)的密碼是完全合法的。如果引號是強制性的,我可以很容易地解決這個問題,但不幸的是他們不是。
我試過許多方法來定義這個密碼令牌/語法規則,但正如我預料它沒有工作,我已經試過了最新的規則是:
TOKEN : {
< S_PASSWORD: (<DIGIT> | <LETTER> |<S_PASSCHAR>)+ >
| <#S_PASSCHAR : "!"|"@"|"#"|"$"|"%"|"^"|"&"|"*" >
| <#LETTER: ["a"-"z", "A"-"Z", "_"]>
| <#DIGIT: ["0" - "9"]>
}
但由於<S_PASSWORD>
可以匹配任何內容,我在前面定義的任何其他標記將匹配它,我總是得到一個JavaCC的警告是這樣的:
警告:「#」不能作爲一個字符串文字令牌在行33515匹配,第13列。它將被匹配爲< S_PASSWORD>。
我的朋友也有類似的建議,但他們也沒有工作。 有人可以幫助我嗎?