V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bramblex
V2EX  ›  Vim

用 vimscript 写了一个 json parser

  •  
  •   bramblex · 2015-11-25 10:27:43 +08:00 · 3278 次点击
    这是一个创建于 3321 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/bramblex/BlxVimrc/blob/master/utils/json.vimrc

    就是 vim 里面的函数栈太浅了……手动递归下降不靠谱 TnT
    28 条回复    2015-11-26 11:16:01 +08:00
    jswh
        1
    jswh  
       2015-11-25 10:33:00 +08:00
    如果玩玩那就算了。如果是有实际用途的建议看看 neovim ,然后用 python 写
    jings
        2
    jings  
       2015-11-25 10:39:22 +08:00
    前排
    jings
        3
    jings  
       2015-11-25 10:39:42 +08:00
    钱排
    bramblex
        4
    bramblex  
    OP
       2015-11-25 11:01:45 +08:00
    @jswh

    Neo 早就在用了。我对我的 vimscript 还有信心,我自己造了 vimscript 语言层面上的模块加载机制,而且我就是自己玩……
    bramblex
        5
    bramblex  
    OP
       2015-11-25 11:01:56 +08:00
    @jings ……什么鬼
    cnallenzhao
        6
    cnallenzhao  
       2015-11-25 11:11:49 +08:00
    前排好顶赞
    Changxu
        7
    Changxu  
       2015-11-25 11:13:07 +08:00
    所以还得用 LR 文法自底向上处理啊。。。就是手写难度有点大
    bramblex
        8
    bramblex  
    OP
       2015-11-25 11:16:03 +08:00
    @Changxu

    LL 就够了,没有左递归

    " Json := Object
    " | List
    " | String
    " | Number
    " | Boolean
    " | Null
    "
    " Object := '{' KeyValueList '}' | '{' '}'
    " KeyValueList := KeyValue | KeyValue ',' KeyValueList
    " KeyValue := String ':' Json
    "
    " List := '[' ListBody ']' | '[' ']'
    " ListBody := Json | Json ',' ListBody
    bramblex
        9
    bramblex  
    OP
       2015-11-25 11:16:42 +08:00
    @cnallenzhao /w\ hi~
    bramblex
        10
    bramblex  
    OP
       2015-11-25 11:20:12 +08:00
    @Changxu 手写 LR 确实蛋疼,但是可以手写 PDA ,然后把 LR 转 PDA 再转代代码就靠谱了。
    ChiChou
        11
    ChiChou  
       2015-11-25 15:01:41 +08:00
    乔帮主 = ,=
    bramblex
        12
    bramblex  
    OP
       2015-11-25 15:19:52 +08:00
    @ChiChou 😂😂😂
    Changxu
        13
    Changxu  
       2015-11-25 17:20:14 +08:00
    @bramblex 这只是个 Vim 脚本、何必呢
    bramblex
        14
    bramblex  
    OP
       2015-11-25 18:22:49 +08:00
    @Changxu

    VimScript 作为一个完备且还算能用的高级语言……这跟我拿 js / python / c++写有什么区别吗?都是设计好自动机,写好文法,然后填代码……
    wittyfox
        15
    wittyfox  
       2015-11-25 18:25:41 +08:00 via Android
    赞赞赞, jj
    Changxu
        16
    Changxu  
       2015-11-25 18:27:52 +08:00
    @bramblex 你也可以尝试 Bash 脚本啊,以前就有人用 Bash 写 SVM 。

    不过我觉得这就是当做消遣了,毕竟 VimScript 离开 Vim 也不能用啊
    xcodebuild
        17
    xcodebuild  
       2015-11-25 18:27:53 +08:00
    丧心病狂
    bramblex
        18
    bramblex  
    OP
       2015-11-25 18:30:59 +08:00
    @Changxu

    Bash 太丧心病狂了😂😂😂……

    虽然我也拿 bash 写过一些蛋疼东西……
    bramblex
        19
    bramblex  
    OP
       2015-11-25 18:32:13 +08:00
    @Changxu
    嘛,反正也是消遣嘛。真正生产用的谁会闲着蛋疼自己手撸……
    Changxu
        20
    Changxu  
       2015-11-25 18:33:12 +08:00
    @bramblex 是啊、看得出来 LZ 你比较无聊。。。不是本科生就是研究僧。。。八成单身?
    bramblex
        21
    bramblex  
    OP
       2015-11-25 18:34:47 +08:00
    @codefalling

    /w\ 我都给 VimScript 造了一套模块化系统了,在 vim 上还有啥丧心病狂的事我不能做的~
    xcodebuild
        22
    xcodebuild  
       2015-11-25 18:35:45 +08:00
    @bramblex 为什么感觉很多回复有股恶意呢。。。
    bramblex
        23
    bramblex  
    OP
       2015-11-25 18:37:54 +08:00
    @Changxu

    本科生,有女朋友。和女朋友很恩爱~ /w\ 哈哈哈
    bramblex
        24
    bramblex  
    OP
       2015-11-25 18:38:05 +08:00
    @codefalling 为啥?
    xcodebuild
        25
    xcodebuild  
       2015-11-25 18:43:32 +08:00
    @bramblex 也许我比较玻璃心-。-但我仍然觉得看到一个有意思的项目,第一反应是作者一定无聊没工作单身,还当面说出来挺奇怪的
    bramblex
        26
    bramblex  
    OP
       2015-11-25 18:51:54 +08:00
    @codefalling

    嘛,无所谓啦。没恶意的就是普通调戏调戏,没什么关系嘛~

    如果是有恶意的,基本上就是自己水平渣还不上进的。比如看到别人有做出有意思的项目了,就觉得别人有时间,然后安慰自己如果自己有时间也能做,结果当自己有时间的时候把时间不断挥霍在游戏电影微博微信上面。

    然而曾经我就是第二种人 😭😭😭
    jprovim
        27
    jprovim  
       2015-11-26 05:47:59 +08:00
    纯支持

    " pretty print json
    nnoremap <leader>J :%!python -m json.tool<CR>

    送你们一个更实用的: 在 buffer 里输入任意 valid JSON, 然后敲打 leader key + J, 自己看结果.
    bramblex
        28
    bramblex  
    OP
       2015-11-26 11:16:01 +08:00
    @jprovim 这种所谓的 pretty print 实现起来很简单的,根本不需要什么外部工具
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2457 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:53 · PVG 23:53 · LAX 07:53 · JFK 10:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.