回答
上下文無關文法未在「差異」或「補充」下關閉。因此,儘管您可能決定向BNF添加一個運算符「減法」,但結果不會是無上下文語法,即使它具有簡單的表達方式。後果:人們不允許BNF語法中的這種操作符用於表達上下文無關語法。
那麼現有的編譯器如何檢查變量不是保留字? – Jus12
識別關鍵詞通常在詞法分析器中完成,而不是在解析器中完成。詞法分析器通常只是*命令*比較,因此您首先查找關鍵字。當且僅當失敗時,你有其他標識符。 –
更復雜的方案將標識符視爲關鍵字,並將它們視爲關鍵字。這要求詞法分析器和解析器進行交互以作出選擇,和/或解析器嘗試關鍵字和標識符替代方法,並選擇關鍵字替代方案(如果有效)。我們用我們的解析器來做到這一點,它工作得非常好。 –
雖然不在BNF中,但EBNF確實有,除了符號(通常定義爲「 - 」)。在你的情況下,語法是:
alphaNum="a"|"b"|...|"z"|"0"|"1"|...|"9"|"A"|...|"Z";
S= (alphaNum,{alphaNum}) - "foo";
或者,如果你希望它是不區分大小寫:
foo="f"|"F","o"|"O","o"|"O";
alphaNum="a"|"b"|...|"z"|"0"|"1"|...|"9"|"A"|...|"Z";
S= (alphaNum,{alphaNum}) - foo;
這導致稍有不同的驗收標準比在這將是意見完成相當於:
alphaNum="a"|"b"|...|"z"|"0"|"1"|...|"9";
S= alphaNum - "f", {alphaNum}
|"f", alphaNum - "o", {alphaNum}
|"f", "o", alphaNum - "o", {alphaNum};
這省去了字符串「f」和「fo」。
但是,由於艾拉巴克斯特的回答很重要,因爲除外(否定)因素會導致問題。
4.7句法例外
甲句法的異常由句法因子受試者 到限制該符號的序列表示 由句法的異常同樣可以的:這也是在ISO standard指出由 表示不包含元標識符的語法因素。
注意 - 如果語法的異常被允許任意 句法因素,擴展BNF可以定義一個更廣泛的類 語言不是上下文無關文法,包括試圖 導致羅素類似的矛盾,例如
xx = "A" - xx;
「A」是xx的一個例子嗎?這種許可證是不受歡迎的 ,因此句法異常的形式被限制爲 可證明是安全的情況。因此,句法因素通常相當於某些上下文無關的語法,但句法異常總是等同於某些常規語法 。可以表明,上下文無關語法和正則語法之間的差別始終是另一個上下文無關語法;因此句法術語(因此根據此標準定義的任何 語法)相當於 某些上下文無關文法。
- 1. SQL Server是否支持BNF表示法?
- 2. 如何在BNF中表示Java風格的OR?
- 3. T-SQL的BNF表示法
- 4. 使用BNF表示簡單的數學
- 5. 是否有BNF與參數
- 6. | |如何?影響BNF語法?
- 7. 擴展BNF到BNF翻譯
- 8. 如何在Scala中使用/表示否定布爾函數?
- 9. 如何在ActiveRecord中用符號表示否定符號?
- 10. 在DecimalFormat中使用BNF
- 11. BNF到正則表達式
- 12. 考慮以下BNF語法(BNF,遞歸)
- 13. BNF和EBNF符號是否允許使用正則表達式?
- 14. 如何在Prolog中否定
- 15. 如何將BNF轉換爲EBNF
- 16. DrRacket BNF語法
- 17. 如何在列表中綁定列表中顯示
- 18. 在BNF語法中的遞歸
- 19. 在Java否定嵌套類如何正則表達式否定
- 20. 在mysql中,如何查詢特定用戶是否在表中?
- 21. 如何確定Crystal報表中是否存在自定義Ufl?
- 22. 如何確定工作表單元格是否在VBA中可見/顯示?
- 23. 如何在numpy中表示「:」
- 24. 如何在datagridview中表示?
- 25. 如何從語法上忽略Antlr BNF中的一部分表達式?
- 26. 如何指定消息是否顯示在p:growl或p:messages中?
- 27. 如何確定HTML控件是否正在頁面中顯示?
- 28. 如何顯示其他表中是否存在字段?
- 29. 如何知道UIImage是否可以在PNG或JPG中表示?
- 30. 如何驗證圖像是否顯示在表中使用webdriver
我認爲可以通過使用單個字符構建字符串,以非常複雜的方式來定義它。 – Jus12
是的,你可以做。總體上你問過否定。對於你的具體例子,這個語法將做到這一點:S = notF any * | 'f'不是任何* | 'f''o'notO any *; notF ='a'| ...'e'| 'g'| ...'z'; notO ='a'| ... | 'n'| 'p'| ...'z'; any ='a'| ... | 'z'; –