时间:2021-05-22
这学期在学习编译原理,最近的上机作业就是做一个简单的词法分析器,在做的过程中,突然有个需求就是判断一个字符串是否为合法的标示符,因为我是用python语言做的,做的是Python的词法分析器,于是下面分享以下怎样判断一个字符串是合法的标示符。
首先,我们来熟悉以下python标示符的定义是什么?
定义:以字母或下划线开始的,由字母,数字或下划线组成,但是不能是python的保留字。
又有疑问了,python有哪些保留字,分别是什么?
# python2.ximport keywordprint keyword.kwlis# python3.ximport keywordprint(keyword.kwlist)# python2.x输出: ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']# 共31个# python3.x输出:['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']# 共33个好了,下面开始判断
# python2.7#!/usr/bin/env python# -*- coding: UTF-8 -*-import keywordimport stringdef is_signal(s): kw = keyword.kwlist if s in kw: return 0 elif s[0] == '_' or s[0] in string.letters: # 判断是否为字母或下划线开头 for i in s: if i == '_' or i in string.letters or i in string.digits: # 判断是否由字母数字或下划线组成 pass else: return 0 return 1 else: return 0def main(): s = raw_input() if is_signal(s) == 1: print "True" else: print "False"if __name__ == '__main__': main()# python3.4#!/usr/bin/env python# -*- coding: UTF-8 -*-import keywordimport stringdef is_signal(s): kw = keyword.kwlist if s in kw: return 0 elif s[0] == '_' or s[0] in string.ascii_letters: # 判断是否为字母或下划线开头 for i in s: if i == '_' or i in string.ascii_letters or i in string.digits: # 判断是否由字母数字或下划线组成 pass else: return 0 return 1 else: return 0def main(): s = input() if is_signal(s) == 1: print("True") else: print("False")if __name__ == '__main__': main()通过键盘输入判断,是标示符,则返回True,否则返回False
补充知识:python:标识符必须以字母或下划线开头,后面跟字母,下划线或者数字
标识符合法性检查,首先要以字母或者下划线开始,后面要跟字母,下划线或者或数字.这个小例子只检查长度大于等于 2 的标识符
idcheck.py
#!/usr/bin/env python'''idcheck.py -- checks identifiers for validity''' import string # string utility module # create alphabet and number setsalphas = string.ascii_letters + '_'nums = string.digits # salutation message and input promptprint ('Welcome to the Identifier Checker v1.0')print ('Testees must be at least 2 chars long.')inp = input('Identifier to test ?') if len(inp) >= 1: if inp[0] not in alphas: print ('invalid: first symbol must be alphabetic') else: for otherChar in inp[1:]: if otherChar not in alphas + nums: print ('invalid: remaining symbols must be alphanumeric') break else: print ("okay as an identifier")else: print ('invalid: length must be >= 1')运行结果 1:
Welcome to the Identifier Checker v1.0Testees must be at least 2 chars long.Identifier to test -> 123_dasinvalid: first symbol must be alphabetic运行结果 2:
Welcome to the Identifier Checker v1.0Testees must be at least 2 chars long.Identifier to test -> _123sdadokay as an identifier以上这篇Python判断字符串是否为合法标示符操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
ASP判断是否包含字符串(InStr函数),ASP使用Instr函数来判断一字符串中是否包含另一字符串。 InStr函数 返回某字符串在另一字符串中第一
判断python中的一个字符串是否为空,可以使用如下方法1、使用字符串长度判断len(s)==0则字符串为空#!/user/local/python/bin/p
一:字符串的方法与操作*注意:首字母为l的为从左边操作,为r的方法为从右边操作1.__contains__()判断是否包含判断指定字符或字符串是否包含在一个字符
本篇文章主要介绍了"shell判断字符串是否为数字",主要涉及到shell判断字符串是否为数字方面的内容,对于shell判断字符串是否为数字感兴趣的同学可以参考
in在Python中是操作符,具体来说是成员操作符。就是对于序列(字符串,元组,列表)或集合(set)或映射(字典)这些数据类型做成员判断,自然成员判断的返回是