我试图将给定的BNF列表转换为EBNF并且我完全无能为力。有人可以帮忙吗?
BNF是:
<Sentence> :== <NounPhrase><VerbPhrase>
<NounPhrase> :== <Noun>
<NounPhrase> :== <Article><Noun>
<NounPhrase> :== <Article><AdjectiveList><Noun>
<NounPhrase> :== <AdjectiveList><Noun>
<AdjectiveList> :== <Adjective>
<AdjectiveList> :== <Adjective><AdjectiveList>
<VerbPhrase> :== <Verb>
<VerbPhrase> :== <Verb><Adverb>
<Noun> :== frog | grass | goblin
<Article> :== a | the | that
<Adjective> :== purple | green | tiny
<Verb> :== grows | dreams | eats
<Adverb> :== quickly | slowly | badly
扩展BNF语法使用以下约定:
这是我到目前为止所提出的,但我不确定它是对的。
Sentence :== (<NounPhrase><VerbPhrase>) +
NounPhrase :== <Noun> + (<Article>< AdjectiveList>)?
AdjectiveList :== <Adjective> *
VerbPhrase :== <Verb> + <Adverb>?
Noun :== (frog | grass | goblin)*
Article :== (a | the | that)*
Adjective :== (purple | green | tiny)*
Verb :== (grows | dreams | eats)*
Adverb :== (quickly | slowly | badly)*
答案 0 :(得分:0)
原来的BNF是:
<Sentence> :== <NounPhrase><VerbPhrase>
<NounPhrase> :== <Noun>
<NounPhrase> :== <Article><Noun>
<NounPhrase> :== <Article><AdjectiveList><Noun>
<NounPhrase> :== <AdjectiveList><Noun>
<AdjectiveList> :== <Adjective>
<AdjectiveList> :== <Adjective><AdjectiveList>
<VerbPhrase> :== <Verb>
<VerbPhrase> :== <Verb><Adverb>
<Noun> :== frog | grass | goblin
<Article> :== a | the | that
<Adjective> :== purple | green | tiny
<Verb> :== grows | dreams | eats
<Adverb> :== quickly | slowly | badly
首次尝试转换为EBNF所需的方言是:
Sentence :== (<NounPhrase><VerbPhrase>) +
NounPhrase :== <Noun> + (<Article>< AdjectiveList>)?
AdjectiveList :== <Adjective> *
VerbPhrase :== <Verb> + <Adverb>?
Noun :== (frog | grass | goblin)*
Article :== (a | the | that)*
Adjective :== (purple | green | tiny)*
Verb :== (grows | dreams | eats)*
Adverb :== (quickly | slowly | badly)*
你提出的不正确:
我对哪些括号下降感到困惑。我不知道终端和非终端之间有什么区别,以及如何在上面区分它们。删除上标“+”和括号是否正确?
终端符号是代表自己的东西。在这种情况下,诸如“青蛙”,“其中”,“绿色”,“梦想”和“严重”等词语都是终端。
非终端符号是根据其他符号定义的,可以是其他非终端符号,也可以是终端符号。 <Sentence>
和<Noun>
等内容属于非终端。
尖括号是<
和>
符号(圆括号或圆括号()
,方括号[]
或大括号或大括号{}
)
从+
中删除括号和Sentence :== (<NounPhrase><VerbPhrase>) +
(以及尖括号)会改善它。在标准BNF中,:==
符号通常为::=
,标准EBNF仅由=
替换,并且用逗号明确指示连接:
Sentence = Noun Phrase, Verb Phrase
在标准EBNF中,终端用双引号或单引号括起来(而不是用字体更改)。并且“上标”也不是必需的 - ?
,+
和*
只会出现在重复的单位之后。 (请注意,标准EBNF在可选事项周围使用[ … ]
,在重复(零个或多个)项目周围使用{ … }
,在重复(一个或多个)项目周围使用{ … }-
。
NounPhrase = Article ? AdjectiveList ? Noun
Noun = "frog" | "grass" | "goblin"