
Swift
2. lexer解析token,它利用正则读取字符串,遍历token时找到最长匹配的那个,然后从字符串里删掉这个token,并添加到tokens列表中(这是删减非核心容错逻辑后的代码)3. 以编码形式定义类似ebnf的syntax语法(向chevrotAIn致敬且创新,创新之处在于采用装饰器方法直接定义静态且可提示的具体方法,chevrotAIn是通过方法动态创建匿名方法),这种方式便于调试,可读性强于ebnf。规则定义冗余、啰嗦,目的是多种定义语法使用方式。4. parser会读取tokens,然后执行顶级语法Es6Parser.program()(顶级语法包含子语法,有嵌套层级)。它把顶级语法推进语法栈,去匹配token,要是匹配到了就从tokens列表里删掉这个token,并加到语法树里,接着进入子语法,把子语法推进语法栈,同样进行token匹配,子语法执行完后,把子语法推出语法栈,再把子语法添加到父语法的子节点,这样执行完就能得到完整的语法树。核心思路。
执行后得到语法树结果。若本文思路有问题,或有更简便的实现方法,烦请告知,若有不足也请指出,多谢。本文只是尝试新思路,是个简单demo,细节处理有漏洞,还请谅解。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号