所有小写字母和λ都是终端符号
我需要帮助推导出这个语法的跟随集。我通常没有遇到这些问题,我知道规则,但是当我从我的书中练习这个例子时,这是我唯一能得到的:
Follow(S) = {$} U Follow(E)
Follow(C) =
Follow(E) =
答案 0 :(得分:1)
根据https://www.cs.uaf.edu/~cs331/notes/FirstFollow.pdf:
要为所有非终结符A计算FOLLOW(A),请应用以下规则,直到任何可以添加到任何FOLLOW集:
- 将$放在FOLLOW(S)中,其中S是起始符号,$是输入右侧标记。
- 如果有生产A⇒αBβ,那么FIRST(β)中除ε外的所有内容都放在FOLLOW(B)中。
- 如果有生产A⇒αB,或生产A⇒αBβ,其中FIRST(β)包含ε(即β⇒ε),那么FOLLOW(A)中的所有内容都在FOLLOW(B)中。
醇>
假设constructor(props) {
super(props);
this.state = { text: '' };
}
onChangeText(text) {
// DO WHATEVER YOU NEED TO DO WITH WHAT USER ENTERED!!!
if (text) {
alert('Blank');
}
this.setState({ text });
}
render() {
return (
<TextInput
onChangeText={this.onChangeText}
value={this.state.text}
/>
);
}
是语法中的起始符号,S
表示空字符串,我们得到:
λ
。{$} ⊆ Follow(S)
。(First(E) \ {λ}) ⊆ Follow(S)
由规则3 /制作4。Follow(E) ⊆ Follow(S)
。(First(then S E) \ {λ}) ⊆ Follow(C)
。 Follow(S) ⊆ Follow(E)
只是First(then S E)
(因为它是终端),所以我们有then
。
这是{then} ⊆ Follow(C)
的唯一约束,因此满足它的最小集合是:
Follow(C)
因为我们有Follow(C) = {then}
和Follow(E) ⊆ Follow(S)
,所以(hah)它们是平等的:
Follow(S) ⊆ Follow(E)
最后我们有
Follow(E) = Follow(S)
幸运的是Follow(S) = {$} ∪ (First(E) \ {λ})
很简单,因为First(E)
只有两个产品,其中一个是空的,另一个是以终端符号开头的:
E
因此
First(E) = {λ, else}
和
Follow(S) = {$, else}