Best Python code snippet using avocado_python
spark.py
Source:spark.py  
...72            self.new2old = {}73            self.makeNewRules()74            self.ruleschanged = 075            self.edges, self.cores = {}, {}76            self.states = { 0: self.makeState0() }77            self.makeState(0, self._BOF)78        #79        #  XXX - should find a better way to do this..80        #81        changes = 182        while changes:83            changes = 084            for k, v in self.edges.items():85                if v is None:86                    state, sym = k87                    if self.states.has_key(state):88                        self.goto(state, sym)89                        changes = 190        rv = self.__dict__.copy()91        for s in self.states.values():92            del s.items93        del rv['rule2func']94        del rv['nullable']95        del rv['cores']96        return rv97    def __setstate__(self, D):98        self.rules = {}99        self.rule2func = {}100        self.rule2name = {}101        self.collectRules()102        start = D['rules'][self._START][0][1][1]	# Blech.103        self.augment(start)104        D['rule2func'] = self.rule2func105        D['makeSet'] = self.makeSet_fast106        self.__dict__ = D107    #108    #  A hook for GenericASTBuilder and GenericASTMatcher.  Mess109    #  thee not with this; nor shall thee toucheth the _preprocess110    #  argument to addRule.111    #112    def preprocess(self, rule, func):	return rule, func113    def addRule(self, doc, func, _preprocess=1):114        fn = func115        rules = doc.split()116        index = []117        for i in xrange(len(rules)):118            if rules[i] == '::=':119                index.append(i-1)120        index.append(len(rules))121        for i in xrange(len(index)-1):122            lhs = rules[index[i]]123            rhs = rules[index[i]+2:index[i+1]]124            rule = (lhs, tuple(rhs))125            if _preprocess:126                rule, fn = self.preprocess(rule, func)127            if self.rules.has_key(lhs):128                self.rules[lhs].append(rule)129            else:130                self.rules[lhs] = [ rule ]131            self.rule2func[rule] = fn132            self.rule2name[rule] = func.__name__[2:]133        self.ruleschanged = 1134    def collectRules(self):135        for name in _namelist(self):136            if name[:2] == 'p_':137                func = getattr(self, name)138                doc = func.__doc__139                self.addRule(doc, func)140    def augment(self, start):141        rule = '%s ::= %s %s' % (self._START, self._BOF, start)142        self.addRule(rule, lambda args: args[1], 0)143    def computeNull(self):144        self.nullable = {}145        tbd = []146        for rulelist in self.rules.values():147            lhs = rulelist[0][0]148            self.nullable[lhs] = 0149            for rule in rulelist:150                rhs = rule[1]151                if len(rhs) == 0:152                    self.nullable[lhs] = 1153                    continue154                #155                #  We only need to consider rules which156                #  consist entirely of nonterminal symbols.157                #  This should be a savings on typical158                #  grammars.159                #160                for sym in rhs:161                    if not self.rules.has_key(sym):162                        break163                else:164                    tbd.append(rule)165        changes = 1166        while changes:167            changes = 0168            for lhs, rhs in tbd:169                if self.nullable[lhs]:170                    continue171                for sym in rhs:172                    if not self.nullable[sym]:173                        break174                else:175                    self.nullable[lhs] = 1176                    changes = 1177    def makeState0(self):178        s0 = _State(0, [])179        for rule in self.newrules[self._START]:180            s0.items.append((rule, 0))181        return s0182    def finalState(self, tokens):183        #184        #  Yuck.185        #186        if len(self.newrules[self._START]) == 2 and len(tokens) == 0:187            return 1188        start = self.rules[self._START][0][1][1]189        return self.goto(1, start)190    def makeNewRules(self):191        worklist = []192        for rulelist in self.rules.values():193            for rule in rulelist:194                worklist.append((rule, 0, 1, rule))195        for rule, i, candidate, oldrule in worklist:196            lhs, rhs = rule197            n = len(rhs)198            while i < n:199                sym = rhs[i]200                if not self.rules.has_key(sym) or \201                    not self.nullable[sym]:202                        candidate = 0203                        i = i + 1204                        continue205                newrhs = list(rhs)206                newrhs[i] = self._NULLABLE+sym207                newrule = (lhs, tuple(newrhs))208                worklist.append((newrule, i+1,209                                 candidate, oldrule))210                candidate = 0211                i = i + 1212            else:213                if candidate:214                    lhs = self._NULLABLE+lhs215                    rule = (lhs, rhs)216                if self.newrules.has_key(lhs):217                    self.newrules[lhs].append(rule)218                else:219                    self.newrules[lhs] = [ rule ]220                self.new2old[rule] = oldrule221    def typestring(self, token):222        return None223    def error(self, token):224        print "Syntax error at or near `%s' token" % token225        raise SystemExit226    def parse(self, tokens):227        sets = [ [(1,0), (2,0)] ]228        self.links = {}229        if self.ruleschanged:230            self.computeNull()231            self.newrules = {}232            self.new2old = {}233            self.makeNewRules()234            self.ruleschanged = 0235            self.edges, self.cores = {}, {}236            self.states = { 0: self.makeState0() }237            self.makeState(0, self._BOF)238        for i in xrange(len(tokens)):239            sets.append([])240            if sets[i] == []:241                break				242            self.makeSet(tokens[i], sets, i)243        else:244            sets.append([])245            self.makeSet(None, sets, len(tokens))246        finalitem = (self.finalState(tokens), 0)247        if finalitem not in sets[-2]:248            if len(tokens) > 0:249                self.error(tokens[i-1])250            else:...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
