如何將此BNF轉換爲EBNF?如何將BNF轉換爲EBNF
<vardec> ::= var <vardeclist>;
<vardeclist> ::= <varandtype> {;<varandtype>}
<varandtype> ::= <ident> {,<ident>} : <typespec>
<ident> ::= <letter> {<idchar>}
<idchar> ::= <letter> | <digit> | _
如何將此BNF轉換爲EBNF?如何將BNF轉換爲EBNF
<vardec> ::= var <vardeclist>;
<vardeclist> ::= <varandtype> {;<varandtype>}
<varandtype> ::= <ident> {,<ident>} : <typespec>
<ident> ::= <letter> {<idchar>}
<idchar> ::= <letter> | <digit> | _
刪除尖括號,並把所有的終端到報價:
vardec ::= "var" vardeclist;
vardeclist ::= varandtype { ";" varandtype }
varandtype ::= ident { "," ident } ":" typespec
ident ::= letter { idchar }
idchar ::= letter | digit | "_"
第一次近似;有一些細節需要修復。 – 2013-02-17 15:05:41
EBNF或Extended Backus-Naur Form是ISO 14977:1996,並且是PDF可從ISO免費*。它沒有被計算機語言標準廣泛使用。還有一個描述它的paper,並且該論文包含彙總EBNF表示法的表格。
Table 1: Extended BNF
Extended BNF Operator Meaning
-------------------------------------------------------------
unquoted words Non-terminal symbol
" ... " Terminal symbol
' ... ' Terminal symbol
(...) Brackets
[ ... ] Optional symbols
{ ... } Symbols repeated zero or more times
{ ... }- Symbols repeated one or more times†
= in Defining symbol
; post Rule terminator
| in Alternative
, in Concatenation
- in Except
* in Occurrences of
(* ... *) Comment
? ... ? Special sequence
*
運算符與前面的(無符號)整數一起使用;它似乎沒有考慮到可變數量的重複 - 例如在初始字符之後1-15個字符使標識符長達16個字符。此LIS
在標準中,左括號(
稱爲開始組符號和右括號)
稱爲端基符號;開放式方括號[
是開始選項符號和方括號是結束選項符號;左大括號{
是起始重複符號和大括號}
是末尾重複符號。單引號'
被稱爲第一個報價符號和雙引號"
是第二個報價符號。
*是的,免費 - 即使您也可以支付74瑞士法郎,如果你願意。查看包含可付費項目的框下的註釋。
問題尋求這種「BNF」轉換成EBNF:
<vardec> ::= var <vardeclist>;
<vardeclist> ::= <varandtype> {;<varandtype>}
<varandtype> ::= <ident> {,<ident>} : <typespec>
<ident> ::= <letter> {<idchar>}
<idchar> ::= <letter> | <digit> | _
的BNF沒有被正式定義,因此我們必須做出一些(容易)猜測到這意味着什麼。翻譯是例程(如果BNF被正式定義它可以是機械的):
vardec = 'var', vardeclist, ';';
vardeclist = varandtype, { ';', varandtype };
varandtype = ident, { ',', ident }, ':', typespec;
ident = letter, { idchar };
idchar = letter | digit | '_';
括號具有圍繞非端子被除去的角度;定義符號::=
被替換爲=
;如;
和_
等終端用引號引起來;級聯明確標記爲,
;並且每個規則以;
結束。原文中的分組和替代操作恰巧與標準符號相符。注意,用逗號顯式連接意味着多字非終端是明確的。
†本身表明{...}-
符號是不是標準的一部分,只是在紙張的標準休閒研究。然而,由於在commentjmmut筆記,標準不明確的{…}-
含義:
§5.8語法術語
...
當一個語法長期是一個語法因素之後 一個除符號後跟一個句法異常它表示滿足 條件的任何符號序列:
a)它是由句法因子表示的符號序列,它不是由句法異常 表示的符號序列。
...
注 -
{ "A" } -
代表的序列的一個或多個A的,因爲它是一個語法長期與空句法例外。
謝謝,這有幫助! – 2013-02-17 16:30:49
我想要注意的是符號'{...} - **是標準的一部分(第4頁末尾,在5.8句法術語下),只是不是以直觀的方式。它顯示瞭如何僅使用「{」,「}」和「-'」一個或多個「規則的定義:」ee = {「A」} - ,「E」;'定義「AE」 ,「AAE」,「AAAE」等 注意{「A」} - 表示一個或多個A的序列,因爲它是一個帶有空語法異常的句法項。 – jmmut 2017-07-18 09:20:49
@jmmut:謝謝。發現得好。 '這是一件有趣的極簡主義。我已經更新了我的答案。我不確定是否過度殺人;有可能。 – 2017-07-18 14:34:40
[轉換BNF到EBNF]的可能的重複(http://stackoverflow.com/questions/8101594/converting-bnf-to-ebnf) – CharlesB 2013-02-17 14:44:46
究竟是什麼問題? – 2013-02-17 14:46:35
'可能重複'的問題有一個答案,其中包含兩個關於SO材料的鏈接。它肯定會提出一個大致相同的問題;但它並沒有很好的答案,所以它不是很好的重複。 – 2013-02-17 14:58:04