我從我需要解析的軟件中獲得(專有)輸出。可悲的是,有一些非用戶名,我正在抓我的頭髮,試圖知道我是否可以用BNF(或EBNF或ABNF)來解析我需要解析的文件。非轉義用戶名與BNF不兼容?
的問題,過於簡單化(這真的只是一個例子),可能是這樣的:
(數據):: = <用戶名>
<用戶名> :: =(其他類型的數據)
而且在某些情況下,用戶名不會出現在左側或右側,而可能出現在一行的中間。
問題是用戶名未轉義,用戶名沒有足夠的限制(它們是可打印的ASCII,最多20個字符,它們不能包含換行符)。例如,「=」將是一個完全有效的用戶名。因此,「= 1 = john = 2」(因爲用戶在登錄時允許選擇他們想要的任何用戶名,並且這些用戶名在我得到的輸出中不會轉義)。
我在問,因爲我的解析器在一些非常有創意的用戶名上發出噓聲(再次,不在我的控制下,他們「很奇怪」,我需要處理它),我無法找到一個簡單的方法來處理這個。另外請注意,我事先並不知道用戶名(例如,我無權訪問包含用戶創建的所有用戶名的數據庫)。
那麼是不受限制和非轉義的用戶名與BNF不相容?
P.S:冷靜與我,如果我犯了錯,這是我的計算器:)的第一篇文章
你怎麼知道用戶名何時結束? – 2010-01-23 14:49:57
@Jason:這就是問題的關鍵。我沒有*定義輸入:可能會出現這種情況,我會使用BNF/tokenizer方法將一個令牌誤認爲用戶名的結尾,反之亦然。Eli和mcdowella回答說:基本上給我任何BNF和能夠選擇我想要的任何用戶名,我可以打破任何標記器。 – SyntaxT3rr0r 2010-01-23 17:42:42