Ejemplo n.º 1
0
class Parser:
    def __init__(self):
        self.lex = None

    def S(self):
        if self.lex.cur_token[0] == 'sign':
            sign = self.lex.cur_token[1]

            self.lex.next_token()

            left_tree = self.S()
            right_tree = self.SPrime()

            return ParsedTree('S', ParsedTree(sign), left_tree, right_tree)

        elif self.lex.cur_token[0] == 'number':
            number = self.lex.cur_token[1]
            self.lex.next_token()

            return ParsedTree('S', ParsedTree(number))

        # elif self.lex.cur_token[0] == 'end':
        # return ParsedTree('S')          # !!!

        else:
            raise BadTokenException(str(self.lex.cur_token))

    def SPrime(self):
        if self.lex.cur_token[0] in ['sign', 'number']:
            sub_tree = self.S()
            return ParsedTree("S'", sub_tree)
        else:
            raise BadTokenException(str(self.lex.cur_token))

    def parse(self, stream):
        self.lex = LexicalAnalyzer(stream)
        self.lex.next_token()
        return self.S()
Ejemplo n.º 2
0
 def parse(self, stream):
     self.lex = LexicalAnalyzer(stream)
     self.lex.next_token()
     return self.S()