您的位置:首页 > 脚本大全 > > 正文

python代码词频分析(python实现词法分析器)

更多 时间:2022-03-31 12:17:33 类别:脚本大全 浏览量:623

python代码词频分析

python实现词法分析器

简单python词法分析器实现,供大家参考,具体内容如下

词法分析器状态转换图:

python代码词频分析(python实现词法分析器)

词法分析器总流程图:

python代码词频分析(python实现词法分析器)

预处理程序:

python代码词频分析(python实现词法分析器)

词法分析器:

python代码词频分析(python实现词法分析器)

词法分析器程序详细设计

python代码词频分析(python实现词法分析器)

详细代码实现:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • #!/usr/bin/env python3.4
  • # coding=utf-8
  • import sys
  • import string
  •  
  •  
  • keywards = {}
  •  
  • # 关键字部分
  • keywards['false'] = 101
  • keywards['class'] = 102
  • keywards['finally'] = 103
  • keywards['is'] = 104
  • keywards['return'] = 105
  • keywards['none'] = 106
  • keywards['continue'] = 107
  • keywards['for'] = 108
  • keywards['lambda'] = 109
  • keywards['try'] = 110
  • keywards['true'] = 111
  • keywards['def'] = 112
  • keywards['from'] = 113
  • keywards['nonlocal'] = 114
  • keywards['while'] = 115
  • keywards['and'] = 116
  • keywards['del'] = 117
  • keywards['global'] = 118
  • keywards['not'] = 119
  • keywards['with'] = 120
  • keywards['as'] = 121
  • keywards['elif'] = 122
  • keywards['if'] = 123
  • keywards['or'] = 124
  • keywards['yield'] = 125
  • keywards['assert'] = 126
  • keywards['else'] = 127
  • keywards['import'] = 128
  • keywards['pass'] = 129
  • keywards['break'] = 130
  • keywards['except'] = 131
  • keywards['in'] = 132
  • keywards['raise'] = 133
  •  
  • # 符号
  • keywards['+'] = 201
  • keywards['-'] = 202
  • keywards['*'] = 203
  • keywards['/'] = 204
  • keywards['='] = 205
  • keywards[':'] = 206
  • keywards['<'] = 207
  • keywards['>'] = 208
  • keywards['%'] = 209
  • keywards['&'] = 210
  • keywards['!'] = 211
  • keywards['('] = 212
  • keywards[')'] = 213
  • keywards['['] = 214
  • keywards[']'] = 215
  • keywards['{'] = 216
  • keywards['}'] = 217
  • keywards['#'] = 218
  • keywards['|'] = 219
  • keywards[','] = 220
  • # 变量
  • # keywards['var'] = 301
  •  
  • # 常量
  • # keywards['const'] = 401
  •  
  • # error
  • # keywards['const'] = 501
  •  
  • signlist = {}
  •  
  •  
  • # 预处理函数,将文件中的空格,换行等无关字符处理掉
  • def pretreatment(file_name):
  •  try:
  •   fp_read = open(file_name, 'r')
  •   fp_write = open('file.tmp', 'w')
  •   sign = 0
  •   while true:
  •    read = fp_read.readline()
  •    if not read:
  •     break
  •    length = len(read)
  •    i = -1
  •    while i < length - 1:
  •     i += 1
  •     if sign == 0:
  •      if read[i] == ' ':
  •       continue
  •     if read[i] == '#':
  •      break
  •     elif read[i] == ' ':
  •      if sign == 1:
  •       continue
  •      else:
  •       sign = 1
  •       fp_write.write(' ')
  •     elif read[i] == '\t':
  •      if sign == 1:
  •       continue
  •      else:
  •       sign = 1
  •       fp_write.write(' ')
  •     elif read[i] == '\n':
  •      if sign == 1:
  •       continue
  •      else:
  •       fp_write.write(' ')
  •       sign = 1
  •     elif read[i] == '"':
  •      fp_write.write(read[i])
  •      i += 1
  •      while i < length and read[i] != '"':
  •       fp_write.write(read[i])
  •       i += 1
  •      if i >= length:
  •       break
  •      fp_write.write(read[i])
  •     elif read[i] == "'":
  •      fp_write.write(read[i])
  •      i += 1
  •      while i < length and read[i] != "'":
  •       fp_write.write(read[i])
  •       i += 1
  •      if i >= length:
  •       break
  •      fp_write.write(read[i])
  •     else:
  •      sign = 3
  •      fp_write.write(read[i])
  •  except exception:
  •   print(file_name, ': this filename not found!')
  •  
  •  
  • def save(string):
  •  if string in keywards.keys():
  •   if string not in signlist.keys():
  •    signlist[string] = keywards[string]
  •  else:
  •   try:
  •    float(string)
  •    save_const(string)
  •   except valueerror:
  •    save_var(string)
  •  
  •  
  • def save_var(string):
  •  if string not in signlist.keys():
  •   if len(string.strip()) < 1:
  •    pass
  •   else:
  •    if is_signal(string) == 1:
  •     signlist[string] = 301
  •    else:
  •     signlist[string] = 501
  •  
  •  
  • def save_const(string):
  •  if string not in signlist.keys():
  •   signlist[string] = 401
  •  
  •  
  • def save_error(string):
  •  if string not in signlist.keys():
  •   signlist[string] = 501
  •  
  •  
  • def is_signal(s):
  •  if s[0] == '_' or s[0] in string.ascii_letters:
  •   for i in s:
  •    if i in string.ascii_letters or i == '_' or i in string.digits:
  •     pass
  •    else:
  •     return 0
  •   return 1
  •  else:
  •   return 0
  •  
  •  
  • def recognition(filename):
  •  try:
  •   fp_read = open(filename, 'r')
  •   string = ""
  •   sign = 0
  •   while true:
  •    read = fp_read.read(1)
  •    if not read:
  •     break
  •  
  •    if read == ' ':
  •     if len(string.strip()) < 1:
  •      sign = 0
  •      pass
  •     else:
  •      if sign == 1 or sign == 2:
  •       string += read
  •      else:
  •       save(string)
  •       string = ""
  •       sign = 0
  •    elif read == '(':
  •     if sign == 1 or sign == 2:
  •      string += read
  •     else:
  •      save(string)
  •      string = ""
  •      save('(')
  •    elif read == ')':
  •     if sign == 1 or sign == 2:
  •      string += read
  •     else:
  •      save(string)
  •      string = ""
  •      save(')')
  •    elif read == '[':
  •     if sign == 1 or sign == 2:
  •      string += read
  •     else:
  •      save(string)
  •      string = ""
  •      save('[')
  •    elif read == ']':
  •     if sign == 1 or sign == 2:
  •      string += read
  •     else:
  •      save(string)
  •      string = ""
  •      save(']')
  •    elif read == '{':
  •     if sign == 1 or sign == 2:
  •      string += read
  •     else:
  •      save(string)
  •      string = ""
  •      save('{')
  •    elif read == '}':
  •     if sign == 1 or sign == 2:
  •      string += read
  •     else:
  •      save(string)
  •      string = ""
  •      save('}')
  •    elif read == '<':
  •     save(string)
  •     string = ""
  •     save('<')
  •    elif read == '>':
  •     save(string)
  •     string = ""
  •     save('>')
  •    elif read == ',':
  •     save(string)
  •     string = ""
  •     save(',')
  •    elif read == "'":
  •     string += read
  •     if sign == 1:
  •      sign = 0
  •      save_const(string)
  •      string = ""
  •     else:
  •      if sign != 2:
  •       sign = 1
  •    elif read == '"':
  •     string += read
  •     if sign == 2:
  •      sign = 0
  •      save_const(string)
  •      string = ""
  •     else:
  •      if sign != 1:
  •       sign = 2
  •    elif read == ':':
  •     if sign == 1 or sign == 2:
  •      string += read
  •     else:
  •      save(string)
  •      string = ""
  •      save(':')
  •    elif read == '+':
  •     save(string)
  •     string = ""
  •     save('+')
  •    elif read == '=':
  •     save(string)
  •     string = ""
  •     save('=')
  •    else:
  •     string += read
  •  
  •  except exception as e:
  •   print(e)
  •  
  •  
  • def main():
  •  if len(sys.argv) < 2:
  •   print("please input filename")
  •  else:
  •   pretreatment(sys.argv[1])
  •  recognition('file.tmp')
  •  for i in signlist.keys():
  •   print("(", signlist[i], ",", i, ")")
  •  
  •  
  • if __name__ == '__main__':
  •  main()
  • 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    原文链接:https://blog.csdn.net/IT_DREAM_ER/article/details/53485583

    您可能感兴趣