JavaCC を使用して SQL 文法のごく一部をシミュレートしていますが、パスワードの定義に問題があります。
私は文法規則を書いています
CREATE USER user_name IDENTIFIED BY a_password
声明、そして私は立ち往生しています。asdkj*!@#
パスワードは、!@%^%ASDjnkj
、などと一致する可能性があるため、_ASDJLJK@#&
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 > として一致します。
私の友人からも同様の提案がありますが、どちらもうまくいきませんでした。誰かがこれで私を助けることができますか?