这串 token 有几个运算符
按模型,count_ops(["1", "+", "2", "-", "3"]) 交回几?
贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print 表达式;表达式是空格分隔的 token,从左到右求值(无优先级),数字 token 当值、名字到环境里查(没有当 0)。
def kind(tok):
"""判 token 属于哪类:数字、运算符、关键字、否则当变量名。"""
if tok.lstrip("-").isdigit():
return "num"
if tok in ("+", "-", "*"):
return "op"
if tok in ("set", "print", "="):
return "kw"
return "name"
def tokenize(line):
"""一行源码切成 token(按空格切)。"""
return line.split()
def count_ops(tokens):
"""这串 token 里有几个运算符。"""
return sum(1 for t in tokens if t in ("+", "-", "*"))
def n_tokens(line):
"""这行切出几个 token。"""
return len(tokenize(line))
print(count_ops(["1", "+", "2", "-", "3"]))
全部评论