美文网首页
编译原理:LL(1)预测分析表程序

编译原理:LL(1)预测分析表程序

作者: Kerwin_Thomas | 来源:发表于2018-11-12 21:21 被阅读25次

    说明

    1. 本程序仅基于最小语法测试集,源代码本身不具有泛化能力
    2. 使用python作为编程语言,应用了少量面向对象思想
    3. 自觉变量名称设计规范,源代码易读,再此不做多余解释,有问题请留言
    TEST_STRING = ["eadeaa", "edeaeaadabacae", "edeaebd"]
    
    
    class Rules(object):
        def __init__(self):
            self.state = "E"
    
        def error(self, position, content):
            print("Position %d ,Error !!" % position, content[position])
            exit(-1)
    
        def log(self):
            print("Stack:  %s" % self.state)
    
        def reduce(self, present_state, char, point):
            temp = self.state[:-1]
            if present_state == 'a' and char == 'a':
                self.state = temp
            elif present_state == 'b' and char == 'b':
                self.state = temp
            elif present_state == 'c' and char == 'c':
                self.state = temp
            elif present_state == 'd' and char == 'd':
                self.state = temp
            elif present_state == 'e' and char == 'e':
                self.state = temp
            else:
                self.error(point, content)
    
        def analyze(self, content, point):
            char = content[point]
            present_state = self.state[-1]
            temp_state = self.state[0:-1]
    
            if present_state == 'E' and char == 'e':
                self.state = temp_state
                self.state += "AaBe"
            elif present_state == 'A':
                if char == 'a':
                    self.state = temp_state
                    self.state += 'a'
                elif char == 'b':
                    self.state = temp_state
                    self.state += 'BcAb'
            elif present_state == 'B':
                if char == 'd':
                    self.state = temp_state
                    self.state += 'dEd'
                elif char == 'a':
                    self.state = temp_state
                    self.state += 'Ca'
            elif present_state == 'C':
                if char == 'e':
                    self.state = temp_state
                    self.state += 'e'
                elif char == 'd':
                    self.state = temp_state
                    self.state += 'Cd'
            self.reduce(self.state[-1], char, point)
            point += 1
            return point
    
    
    class Tools(object):
        @staticmethod
        def process(content):
            anaylzer = Rules()
            point = 0
            while point < len(content):
                point = anaylzer.analyze(content, point)
                anaylzer.log()
    
    
    if __name__ == "__main__":
        for content in TEST_STRING:
            print("Test String: %s" % content)
            Tools.process(content)
            print('\n')
    
    

    相关文章

      网友评论

          本文标题:编译原理:LL(1)预测分析表程序

          本文链接:https://www.haomeiwen.com/subject/folhfqtx.html