.版本 2
.支持库 RegEx

.程序集 词法分析程序集
.程序集变量 正则, 正则表达式

.子程序 词法分析
    .参数 表达式, 文本型
    .参数 返回值, 词, 参考 数组
    .局部变量 上次结果位置, 整数型
    .局部变量 当前词, 词
    .局部变量 当前匹配文本, 文本型
    .局部变量 res, 搜索结果

    .局部变量 i, 整数型

    ' 可能带°的数字 (\d+)(\.\d+)*[°]{0,1}
    ' 标识符 [a-zA-ZΑ-Ωα-ω_][a-zA-ZΑ-Ωα-ω0-9_]*
    ' 算符 [\+\-\*\/\^]
    ' 括号 [\(\)]
    ' 注释 \#.+
    ' 逗号 ,
    
    ' 易语言的正则表达式没办法用\u, 也没办法写希腊字母, 也没办法写「°」, 因此去掉希腊字母和「°」, 加上空白, 合起来就是这样的
    .如果真 (正则.是否为空 ())
        正则.创建 (“((\d+)(\.\d+)*)|([a-zA-Z_][a-zA-Z0-9_]*)|([\+\-\*\/\^])|([\(\)])|(\#.+)|([,])|[ ]+$”, )
    .如果真结束
    
    ' ________________m1______________ -> 数字
    ' ____________ m2___m3____________ -> 数字的整数和小数部分
    ' __________________________________________m4___________ -> 标识符 包含英文字母和希腊字母 只能以字母或下划线开头, 之后可以是数字或字母下划线
    ' _______________________________________________________________m5______ -> 算符, +-*/^
    ' __________________________________________________________________________m6___ -> 括号
    ' _________________________________________________________________________________m7___ -> 注释
    ' _______________________________________________________________________________________m8___ -> 逗号
    
    ' 调试输出 (正则.取子表达式个数 ())
    
    清除数组 (返回值)
    上次结果位置 = 1
    
    .判断循环首 (上次结果位置 ≤ 取文本长度 (表达式) 且 当前词.类型 ≠ -1)
        当前词.内容 = “”
        当前词.类型 = -1
        res = 正则.搜索 (表达式, 上次结果位置, )
        
        .计次循环首 (#词类型枚举数量, i)
            .如果真 (i = #词类_整数部分 或 i = #词类_小数部分)
                到循环尾 ()
            .如果真结束
            
            当前匹配文本 = res.取子匹配文本 (表达式, i, 上次结果位置)
            
            .如果真 (取文本长度 (当前匹配文本) > 0 且 i ≠ #词类_空格)
                当前词.内容 = 当前匹配文本
                当前词.类型 = i
                上次结果位置 = 上次结果位置 + 取文本长度 (当前匹配文本) + 1
                加入成员 (返回值, 当前词)
                
                跳出循环 ()
            .如果真结束
            
        .计次循环尾 ()
        
        
    .判断循环尾 ()
    
    

.子程序 输出词法分析结果
    .参数 词, 词, 数组
    .局部变量 i, 整数型

    .计次循环首 (取数组成员数 (词), i)
        标准输出 (, “当前类型: ” + 到文本 (词 [i].类型) + “, 内容: ” + 词 [i].内容 + #换行符)
    .计次循环尾 ()
    标准输出 (, “----” + #换行符)
    

.子程序 词法分析并输出
    .参数 表达式, 文本型
    .局部变量 res, 词, , "0"
    .局部变量 t0, 长整数型

    t0 = 时间_取现行时间戳1 (真)
    词法分析 (表达式, res)
    标准输出 (, “用时 ” + 到文本 (时间_取现行时间戳1 (真) - t0) + “ms” + #换行符)
    输出词法分析结果 (res)