LL(1) 文法:
(1) Var -> ID DimList
(2) DimList -> ε DimList'
(3) DimList' -> Dim DimList'
(4) DimList' -> ε
(5) Dim -> [ CONST ]
そして、私が読んでいるスクリプトでは、関数FIRST(ε DimList')
が{#, [}
. しかし、どうやって?
私の推測では、(2) の右辺は で始まるε
ので、イプシロンをスキップしてFIRST(DimList')
、(3) と (5) を考慮すると、 に等しいものを{[}
とりますが、(4) のために、 をとるFOLLOW(DimList')
こともでき{#}
ます。
他の方法としては、(2) で始まるため、ε
イプシロンをスキップして取るがFIRST(DimList')
、(2) から FOLLOW(DimList) を取ることもあります...
私はまだ LL(1) 文法の基礎を学んでいますが、最初の方がより理にかなっています。
編集: そしてもちろん、これらのどちらも真実ではない可能性があります。