プログラミングと工作と

PythonとかPascalとかAVRマイコンとか、コンパイラつくったり電子工作なんかを楽しんでいるおっさんの記録

メソッドを集めて、記号表クラスファイルをつくった!

さて、ここ数日作ってきたメソッドを組み合わせて、記号表クラスのファイル「sym.py」を作ってみた。


#!/usr/bin/python
# coding: utf-8


class sym:
    
    def __init__(self, token, e):
        self.symbol = {}
        self.e = e
        self.token = token
    
    
    def check_int(self, st):
        i = 0
        length = len(st)
        intcheck = 'true'
        if st[0] == '-':
            i = 1
        while i < length:
            if st[i] not in self.token.digit:
                intcheck = 'false'
                break
            i = i + 1
        return intcheck
    
    
    def check_lit(self, name):
        lit = 'false'
        if name in ['true', 'false']:
            lit = 'true'
        if self.check_int(name):
            lit = 'true'
        return lit
    
    
    def which_value(self, name):
        if self.check_lit(name):
            return name
        elif name in self.symbol:
            return self.symbol[name]['value']
        else:
            error(25)
   
    
    def insert(self, name, typ, mod, val, alc, uni):
        i = 0
        id_len = len(name)
        while i < id_len:
            nam = ''           
            while i < id_len:
                nam = nam + name[i]
                i = i + 1
                if i < id_len:
                    if name[i] == ',':
                        i = i + 1
                        break
                
            if nam in self.symbol:
                self.e.error(23)
            if nam in self.token.keyword:
                self.e.error(24)
            self.symbol[name] = {'type':typ, 'mode':mod, 'value':val,
                                 'alloc':alc, 'units':uni}

昨日まで作ってきたメソッドの「self.」やディクショナリをちゃんと宣言したり、エラー関数メソッドのエラー内容を追加したりした。
あとは、構文解析ファイル内の記号を保存するべき場所に、今日作ったクラスメソッドを入れていく作業が残っています。
明日以降に変更していきます。