按照设置示例不遵循任何规则?

时间:2017-10-02 04:17:54

标签: parsing grammar ambiguous-grammar

  1. S→asg
  2. S→如果C则是S E
  3. C→bool
  4. E→其他S
  5. E→λ
  6. 所有小写字母和λ都是终端符号

    我需要帮助推导出这个语法的跟随集。我通常没有遇到这些问题,我知道规则,但是当我从我的书中练习这个例子时,这是我唯一能得到的:

    Follow(S) = {$} U Follow(E) 
    Follow(C) = 
    Follow(E) = 
    

1 个答案:

答案 0 :(得分:1)

根据https://www.cs.uaf.edu/~cs331/notes/FirstFollow.pdf

  

要为所有非终结符A计算FOLLOW(A),请应用以下规则,直到任何可以添加到任何FOLLOW集:

     
      
  1. 将$放在FOLLOW(S)中,其中S是起始符号,$是输入右侧标记。
  2.   
  3. 如果有生产A⇒αBβ,那么FIRST(β)中除ε外的所有内容都放在FOLLOW(B)中。
  4.   
  5. 如果有生产A⇒αB,或生产A⇒αBβ,其中FIRST(β)包含ε(即β⇒ε),那么FOLLOW(A)中的所有内容都在FOLLOW(B)中。
  6.   

假设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表示空字符串,我们得到:

    规则1
  • λ
  • 规则2 /制作2
  • {$} ⊆ Follow(S)
  • (First(E) \ {λ}) ⊆ Follow(S)由规则3 /制作4。
  • 规则2 /制作2
  • Follow(E) ⊆ Follow(S)
  • 规则3 /制作2
  • (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}