V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
azh7138m
V2EX  ›  JavaScript

使用高阶函数构造自己的校验器

  •  2
     
  •   azh7138m · 2019-02-08 13:48:25 +08:00 · 4478 次点击
    这是一个创建于 2119 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github 传送门

    之前看了轮子哥的文章 使用高阶函数开发语法分析器,便想用 js 重新实现一下,就有了这个轮子。

    她是什么

    有一点 combinator 的感觉,提供了几个函数可以让你解析用 BNF 描述规则的东西。

    她能做什么

    • tokenizer
    • AST 虽然简陋了点也算是吧(
    • calculator 四则运算是每个 parser 的必经之路
    • rfc1738 校验器 按照 rfc 来构建校验器,妈妈再也不用担心我写的 validator 被人怼啦
    • json 解析器 实现了 JSON.parse 比较拙劣,性能和原生方法差 300 倍 ( node10,node8 下通常是 500 倍)

    她有哪些特点

    短小(指代码

    核心实现 150 行,还包括了许多辅助函数和类型

    测试覆盖全面

    -----------|----------|----------|----------|----------|-------------------|
    File       |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
    -----------|----------|----------|----------|----------|-------------------|
    All files  |      100 |      100 |      100 |      100 |                   |
     parser.ts |      100 |      100 |      100 |      100 |                   |
    -----------|----------|----------|----------|----------|-------------------|
    

    她有哪些问题

    有的文件使用了 ts,但实际数据的类型不是那个样子的(笑

    如何食用

    package.json

    第 1 条附言  ·  2019-02-08 22:58:01 +08:00

    全是收藏,没有star,感觉被嫖了,没给钱 被白嫖

    3 条回复    2019-02-08 16:56:01 +08:00
    Actrace
        1
    Actrace  
       2019-02-08 14:32:36 +08:00
    高阶领主表示你很聪明,赞赏了你。
    qdwang
        2
    qdwang  
       2019-02-08 16:40:13 +08:00 via iPhone
    春节期间还在努力学习练习,乃我辈楷模,佩服!
    azh7138m
        3
    azh7138m  
    OP
       2019-02-08 16:56:01 +08:00
    @qdwang 春节只补充了测试(
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1200 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:15 · PVG 07:15 · LAX 15:15 · JFK 18:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.