diff -r 5389e6fbb3bc -r 0eaf09920532 compiler/PPCNode.st --- a/compiler/PPCNode.st Wed Nov 05 21:40:01 2014 +0000 +++ b/compiler/PPCNode.st Wed Nov 05 23:05:19 2014 +0000 @@ -1,12 +1,18 @@ "{ Package: 'stx:goodies/petitparser/compiler' }" Object subclass:#PPCNode - instanceVariableNames:'contextFree name' + instanceVariableNames:'contextFree name firstSet firstCharSet' classVariableNames:'' poolDictionaries:'' category:'PetitCompiler-Nodes' ! +!PPCNode class methodsFor:'as yet unclassified'! + +new + ^ self basicNew initialize +! ! + !PPCNode methodsFor:'accessing'! children @@ -69,6 +75,13 @@ ^ nil ! +firstCharSetCached + firstCharSet ifNil: [ + firstCharSet := self firstCharSet. + ]. + ^ firstCharSet +! + firstSetSuchThat: block ^ self firstSetSuchThat: block into: (OrderedCollection new) openSet: IdentitySet new. ! @@ -113,7 +126,10 @@ !PPCNode methodsFor:'as yet unclassified'! firstSet - ^ self firstSetSuchThat: [ :e | e isFirstSetTerminal ] + firstSet ifNil: [ + firstSet := self firstSetSuchThat: [ :e | e isFirstSetTerminal ]. + ]. + ^ firstSet ! name