0
我想了解如何使用EBNF定義形式文法,特別是用空格分隔的單詞序列分隔的單詞列表,像EBNF語法爲一個空格
<non-terminal> [<word>[ <word>[ <word>[ ...]]] <non-terminal>
- 什麼是定義一個字終端的正確方法?
- 什麼是正確的方式來表示所需的空白?
- 如何表示可選的重複列表?
- EBNF在任何地方有任何關於示例的教程嗎?
非常感謝提前!
我想了解如何使用EBNF定義形式文法,特別是用空格分隔的單詞序列分隔的單詞列表,像EBNF語法爲一個空格
<non-terminal> [<word>[ <word>[ <word>[ ...]]] <non-terminal>
非常感謝提前!
您必須決定您的詞法分析器是否要爲該空格返回一個令牌(終端)。你還必須決定它(詞法分析器)將如何定義單詞,或者你的語法是否會這樣做(在這種情況下,詞法分析器將作爲終端返回什麼?)。其餘的主要是理解EBNF符號的細微差別的問題,這是一個ISO標準(ISO 14977:1996),它可以從Freely Available Standards免費下載,您也可以從ISO),但這是一個在實踐中很大程度上被忽略的標準。 (我處理語言 - C,C++,SQL - 在定義文件使用BNF符號,但它不以任何人EBNF)
P. J. O'Neill
。詞法分析器會返回什麼樣的令牌?{
和}
括號中,或者您可以使用Kleene Star記號。我認爲一個非空,空格分隔的單詞列表可能使用來定義:
non_empty_word_list = word { space word }
,所有的名字也有非終結。您需要根據系統的相關終端來定義這些。
謝謝喬納森 - 你的答案正是我需要的。它還有助於回答我曾經遇到的其他一些問題,例如,是否需要詞法分析階段?如果不需要,我可以通過一次遍歷,甚至可以使用解析器組合器庫。這麼多的問題。再次感謝! – lshepstone