def 词法解析(输入:str):
输入=list(输入)
符号=["+","-",",",";","*","/","=","<",">",")","(","[","]","{","}","|","!","&"]
保留字=["if","else","while","break","return"]
无双引号=True
无单引号=True
无转义符=True
输出=[]
i=len(输入)
字符=[]
while i!=0:
i=i-1
if 输入[0]=='"' and 无单引号 and 无转义符:
无双引号=not 无双引号
if len(字符)!=0:
if 无双引号:
输出.append((''.join(字符)).strip())
else:
输出.append(''.join(字符))
字符=[]
输出.append('"')
elif 输入[0]=="'" and 无双引号 and 无转义符:
无单引号=not 无单引号
if len(字符)!=0:
if 无单引号:
输出.append((''.join(字符)).strip())
else:
输出.append(''.join(字符))
字符=[]
输出.append("'")
elif 输入[0]=="#":
if "\n" in 输入:
a=输入.index("\n")
i=i-a
del 输入[0:a]
else:
break
elif 输入[0] in 符号 and 无单引号 and 无双引号:
if len(字符)!=0:
输出.append((''.join(字符)).strip())
字符=[]
输出.append(输入[0])
else:
if 无双引号 and 无单引号 and 输入[0]!="\n":
字符.append(输入[0])
elif (not 无双引号) or (not 无单引号):
字符.append(输入[0])
无转义符=True
if 输入[0]=="\\" and 无转义符:
无转义符=False
del 输入[0]
输入=输出.deepcopy()
输出=[]
if 无双引号 and 无单引号 and 无转义符:
无双引号=True
无单引号=True
类型='无'
包围层级=['']
i=0
m=len(输入)
左包围符号=["(","[","{"]
右包围符号=[")","]","}"]
while i!=m:
if (输入[i] in 保留字) and 无单引号:
if 包围层级[-1]=='(' or 包围层级[-1]=='[':
print("\033[1m\033[5m\033[31m错误:\n 词法解析器报错:\n 您不能再索引或参数中使用命令!\n错误代码:1\033[0m")
return [False,1]
else:
#
elif (输入[i] in 左包围符号) and 无双引号 and 无单引号:
包围层级.append(输入[i])
elif (输入[i] in 右包围符号) and 无双引号 and 无单引号:
if 包围层级[-1]==输入[i]:
del 包围层[-1]
#
else:
print("\033[1m\033[5m\033[31m错误:\n 词法解析器报错:\n 括号(();[];{})使用错误,您不能这样使用!\n错误代码:3\033[0m")
return [False,3]
#数 字符 代码段 索引 算符 命令 参数
else:
print("\033[1m\033[5m\033[31m错误:\n 词法解析器报错:\n 引号使用错误或者转义符号使用错误,您可能少加了一个引号或在末尾加了转义符号!\n错误代码:0\033[0m")
return[False,0]
return 输出
python写了个词法解析器,没写完,记录一下
最新推荐文章于 2024-09-29 14:13:49 发布
该代码实现了一个简单的词法解析器,用于处理包含特定符号、保留字和括号的输入字符串。它识别双引号、单引号、注释以及不同类型的括号,并检查它们的正确匹配。如果遇到语法错误,如括号不匹配或在不应出现的地方使用保留字,程序会返回错误信息。
摘要由CSDN通过智能技术生成