Compiler construction 建立语法的跟随集

Compiler construction 建立语法的跟随集,compiler-construction,set,grammar,Compiler Construction,Set,Grammar,我有一个删除了左递归的语法,它也是左因子的 我已经创建了第一个集合,这是一项非常简单的任务,但是构建后续集合是有问题的。我试图找到一些有用的例子,但没有找到任何对我有帮助的 以下是语法: St是开始符号 St -> St' St' -> i S' E -> i E' E' -> [ E ] E' E' -> ε S' -> = E S' -> [ E ] = E 对应的第一组是 E = { i } E' = { [, ε } S' = { [, = }

我有一个删除了左递归的语法,它也是左因子的

我已经创建了第一个集合,这是一项非常简单的任务,但是构建后续集合是有问题的。我试图找到一些有用的例子,但没有找到任何对我有帮助的

以下是语法:

St是开始符号

St -> St'
St' -> i S'
E -> i E'
E' -> [ E ] E'
E' -> ε
S' -> = E
S' -> [ E ] = E
对应的第一组是

E = { i }
E' = { [, ε }
S' = { [, = }
St = { i }
St' = { i }
现在,构建follow集合的规则非常简单,但我不知道如何正确地应用它们

到目前为止,我构建的以下集合是:

E = {}
E' = {}
S' = {}
St = {$}
St' {$}
但在这之后,我不知道如何继续。一些技巧将是最受欢迎的,我不希望得到这个问题的完整解决方案,只是一些技巧,以便我能够理解如何构建跟随集。

跟随集的规则

  • 首先在Follow(S)中放入$(输入结束标记)(S是开始符号) 如果有生产→ aBb,(其中a可以是一整串),则第一(b)中除ε之外的所有内容都放在后面(b)中

  • 如果有生产→ aB,那么FOLLOW(A)中的所有内容都在FOLLOW(B)中

  • 如果有生产→ aBb,其中第一个(b)包含ε,那么后面(A)中的所有内容都在后面(b) 根据上述规则,您的答案是:

    E = { ] }
    
    E' = { ] }
    
    S' = { $ }
    
    St = { $ }
    
    St'= { $ }