用 vimscript 写了一个 json parser - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
bramblex
V2EX    Vim

用 vimscript 写了一个 json parser

  •  
  •   bramblex Nov 25, 2015 3804 views
    This topic created in 3809 days ago, the information mentioned may be changed or developed.
    https://github.com/bramblex/BlxVimrc/blob/master/utils/json.vimrc

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

    Neo 早就在用了。我对我的 vimscript 还有信心,我自己造了 vimscript 语言层面上的模块加载机制,而且我就是自己玩……
    bramblex
        5
    bramblex  
    OP
       Nov 25, 2015
    @jings ……什么鬼
    cnallenzhao
        6
    cnallenzhao  
       Nov 25, 2015
    前排好顶赞
    Changxu
        7
    Changxu  
       Nov 25, 2015
    所以还得用 LR 文法自底向上处理啊。。。就是手写难度有点大
    bramblex
        8
    bramblex
    OP
       Nov 25, 2015
    @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
       Nov 25, 2015
    @cnallenzhao /w\ hi~
    bramblex
        10
    bramblex  
    OP
       Nov 25, 2015
    @Changxu 手写 LR 确实蛋疼,但是可以手写 PDA ,然后把 LR 转 PDA 再转代代码就靠谱了。
    ChiChou
        11
    ChiChou  
       Nov 25, 2015
    乔帮主 = ,=
    bramblex
        12
    bramblex  
    OP
       Nov 25, 2015
    Changxu
        13
    Changxu  
       Nov 25, 2015
    @bramblex 这只是个 Vim 脚本、何必呢
    bramblex
        14
    bramblex  
    OP
       Nov 25, 2015
    @Changxu

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

    不过我觉得这就是当做消遣了,毕竟 VimScript 离开 Vim 也不能用啊
    xcodebuild
        17
    xcodebuild  
       Nov 25, 2015
    丧心病狂
    bramblex
        18
    bramblex  
    OP
       Nov 25, 2015
    @Changxu

    Bash 太丧心病狂了……

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

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

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

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

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

    然而曾经我就是第二种人
    jprovim
        27
    jprovim  
       Nov 26, 2015
    纯支持

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

    送你们一个更实用的: 在 buffer 里输入任意 valid JSON, 然后敲打 leader key + J, 自己看结果.
    bramblex
        28
    bramblex  
    OP
       Nov 26, 2015
    @jprovim 这种所谓的 pretty print 实现起来很简单的,根本不需要什么外部工具
    About     Help     Advertise     Blog     API     FAQ     Solana     4963 Online   Highest 6679      Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 09:20 PVG 17:20 LAX 02:20 JFK 05:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86