91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 6KB
    文件類型: .py
    金幣: 1
    下載: 1 次
    發布日期: 2021-07-24
  • 語言: Python
  • 標簽: 語義分析??

資源簡介

語義分析(自定的語義規則)代碼python實現。 說明: 1. mktable(previous):創建一張新的符號表,并返回指向新表的指針。參數previous指向先前創建的符號,放在新符號表的表頭。 2. enter(table, name, type, offset):在table指向的符號表中為名字name建立新表項,同時將類型type及相對地址offset放入該表項的屬性域中。 3. addwidth(table, width):將table指向的符號表中所有表項的寬度之和記錄在與符號表關聯的表頭中。 4. enterproc(table, name, newtable):在table指向的符號表中為過程name建立一個新表項,參數newtable指向過程name的符號表。

資源截圖

代碼片段和文件信息

‘‘‘
語義分析——符號表信息登錄?
python?3.6.1
‘‘‘

import?collections


class?s:
????‘‘‘
????詞法分析輸出的對象
????‘‘‘

????def?__init__(self?strs?state):
????????self.strname?=?strs
????????self.state?=?state


class?lexer:
????‘‘‘
????詞法分析
????‘‘‘
????resword?=?{‘real‘:?‘4‘?‘integer‘:?‘5‘?‘ptr‘:?‘6‘}

????def?__init__(self?strs):
????????self.strings?=?strs
????????self.state?=?-1
????????self.stritemList?=?[]

????def?convert(self):
????????strLength?=?len(self.strings)
????????i?=?0
????????string?=?‘‘
????????while?i?????????????ch?=?self.strings[i]
????????????i?+=?1
????????????if?self.state?==?-1:
????????????????if?ch.isalpha():
????????????????????self.state?=?1
????????????????????string?=?ch
????????????????elif?ch.isspace():
????????????????????self.state?=?-1
????????????????elif?ch?==?‘:‘:
????????????????????self.state?=?2
????????????????????self.stritemList.append(s(ch?self.state))
????????????????????self.state?=?-1
????????????????elif?ch?==?‘;‘:
????????????????????self.state?=?3
????????????????????self.stritemList.append(s(ch?self.state))
????????????????????self.state?=?-1
????????????????elif?ch?==?‘#‘:
????????????????????self.state?=?0
????????????????????self.stritemList.append(s(ch?self.state))
????????????????????self.state?=?-1
????????????????else:
????????????????????strItem?=?ch?+?‘字符不可識別‘
????????????????????self.state?=?-1
????????????elif?self.state?==?1:
????????????????if?ch.isalpha()?or?ch.isdigit():
????????????????????string?+=?ch
????????????????????self.state?=?1
????????????????else:
????????????????????if?string?in?self.resword.keys():
????????????????????????self.state?=?self.resword.get(string)
????????????????????strItem?=?string
????????????????????self.stritemList.append(s(strItem?self.state))
????????????????????string?=?‘‘
????????????????????self.state?=?-1
????????????????????i?-=?1

????def?getstritemList(self):
????????return?self.stritemList


class?stitem:
????‘‘‘
????符號表的表項
????‘‘‘

????def?__init__(self?name?typename?offset):
????????self.name?=?name
????????self.typename?=?typename
????????self.offset?=?offset


class?tbl:
????‘‘‘
????符號表
????‘‘‘
????tbl?=?collections.OrderedDict()??#?有序字典

????def?__init__(self?width=None):
????????self.width?=?width

????def?pop(self):??#?棧的pop操作
????????popitem?=?self.tbl.popitem()
????????return?popitem

????def?push(self?item):??#?棧的push操作
????????self.tbl[item.name]?=?item


def?mktable(previous):
????‘‘‘
????創建一張新的符號表,并返回指向新表的指針。參數previous指向先前創建的符號,放在新符號表的表頭。
????‘‘‘
????table?=?tbl()
????if?previous.name?==?‘‘:
????????return?table
????else:
????????table.push(pr

評論

共有 條評論