五类 Token 各有几个

👁️ 1 人浏览 💬 0 人评论 ❤️ 添加收藏

把那段源码切成 Token,按 关键字/标识符/数字/字符串/运算符 的顺序,输出五个数量,用 / 拼成一行。

let rate = 12;
let msg = "hi there";
total = rate >= 3;

玩具语言的词法规则:关键字 let if else while;标识符以字母或下划线开头;数字是连续的数位;字符串用一对双引号括起来(不含转义);双字符运算符 >= <= == !=;单字符运算符 + - * / = < > ; ( );空白只做分隔。

KEYWORDS = ("let", "if", "else", "while")
TWO = ("==", "!=", ">=", "<=")
ONE = "+-*/=<>;()"
SRC = 'let rate = 12;\nlet msg = "hi there";\ntotal = rate >= 3;'

import re
pat = re.compile(r'[A-Za-z_]\w*|\d+|"[^"]*"|==|!=|>=|<=|[+\-*/=<>;()]')
c = dict(kw=0, id=0, num=0, st=0, op=0)
for m in pat.finditer(SRC):
    w = m.group()
    if w in KEYWORDS: c["kw"] += 1
    elif w[0].isalpha() or w[0] == "_": c["id"] += 1
    elif w[0].isdigit(): c["num"] += 1
    elif w[0] == '"': c["st"] += 1
    else: c["op"] += 1
print("/".join(str(c[k]) for k in ("kw", "id", "num", "st", "op")))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论