Demo entry 6662476

me

   

Submitted by anonymous on Nov 26, 2017 at 13:48
Language: Python 3. Code size: 1.4 kB.

# -*- coding: utf-8 -*-
import copy
import re
#文法内容,在python中使用字典表示
Gram = {'S':['AB','bC'],'A':['&','b'],'B':['&','aD'],'C':['AD','b'],'D':['aS','c']}

#以字典表示非终结符的数组,初始状态为-1(表示未定),'True'表示可以推出‘&’,'False'表示不可推出‘&’
X = {'S': -1,'A': -1,'B': -1,'C': -1,'D': -1}

#----------------------判空操作-------------------

def CheckNull():
    for key in Gram: #遍历文法中的非终结符键
        for item in Gram[key][:]: 
            if not re.match('^[&+A-Z]+$',item): #正则表达式进行判断是否含有终结符
                Gram[key].remove(item) #remove操作删除右部含有终结符的表达式

        if not Gram[key]: #如果字典中的对应右部为空
            X[key] = False #则将X数组标记为'False',即否
        if '&' in Gram[key]: #如果字典中含有‘&’
            X[key] = True #则将X数组标记为‘True’,即是
            Gram[key] = [] #将右部置空

    for Key in X: #遍历X数组中的非终结符
        if X[Key] == -1: #如果状态为-1,即未定
            for items in Gram[Key][:]: #遍历产生式右部
                for item in items[:]: #遍历右部的每一符号
                    if X[item] == True: #如果非终结符在X中对应的标志是True
                        Gram[Key] = [w.replace(item,'') for w in Gram[Key]] #则删除该终结符
                        if not Gram[Key][0]:
                            X[Key] = True
                    else:
                        X[Key] = False
    print("判空后X: ",X)
    print("判空后文法: ",Gram)

if __name__ == '__main__':
    print("初始文法: ",Gram)
    print("初始X: ",X)    
    CheckNull()

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).