软件设计师 编译原理 文法的一道题,给定文法G[S]及其非终结符A,FIRST[A]定义为:从A出发能推导出的终结符号的集合(S是起始符号,为非终结符).对于文法G[S]:S->[L]|aL->L,S|S其中,G[S]包含的四个非终结符号分别为:a ,[ ]则,FIRST的成员包括:( )A.a B.a、[ C.a、[和] D.a、[、]和,请不要只告诉我FIRST(S)={[ ,a}FIRST(L)=FIRST(S)={[ ,a},所以选B我想 知道怎么来的 ,为什么不是选D,明明都可以推出来的啊

问题描述:

软件设计师 编译原理 文法的一道题,
给定文法G[S]及其非终结符A,FIRST[A]定义为:从A出发能推导出的终结符号的集合(S是起始符号,为非终结符).对于文法G[S]:
S->[L]|a
L->L,S|S
其中,G[S]包含的四个非终结符号分别为:
a ,[ ]
则,FIRST的成员包括:( )
A.a B.a、[ C.a、[和] D.a、[、]和,
请不要只告诉我FIRST(S)={[ ,a}
FIRST(L)=FIRST(S)={[ ,a},所以选B
我想 知道怎么来的 ,为什么不是选D,明明都可以推出来的啊

我想first[A] 不应该像你说的那样定义:从A出发能推导出的终结符号的集合中.这样这道题考得就没有什么意义了:只要知道非终结符L都能推出哪些终结符就可以了.如果是要考查对first的理解的话,应该按照first的本意,即“第一个终结符”,这样就只有B是正确的