繁体   English   中英

我需要帮助编写 LL 解析器语法

[英]I Need Help Writing a LL Parser Grammar

我正在创建一个 map 编辑器。
由于 map 使用专有语言,我需要为它创建自己的解析器。

map 分为扇区,每个文件代表一个扇区。 这是典型扇区文件的一小部分:

6-27: Refresh, Content={4623}
6-28: Content={4600}
6-29: Content={4602}
6-30: Content={4597}
6-31: Content={4597}
7-0: Content={1316, 1317, 1306}
7-1: ProtectionZone, Content={415, 3198 Charges=5, 2469 Content={2871 Content={2854 Content={3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5}, 2871 Content={3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5}, 2871 Content={3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5}, 2854 Content={3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5}, 2871 Content={3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5}, 2870 Content={3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5}, 2868 Content={3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5}, 2854 Content={3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5}, 2854 Content={3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5, 3198 Charges=5}}}}
7-2: ProtectionZone, Content={415, 3029 Amount=1, 3052, 2992 Amount=5}
7-3: ProtectionZone, Content={415}
7-4: ProtectionZone, Content={415, 3033 Amount=1, 3098, 2981}
7-5: ProtectionZone, Content={415, 3027 Amount=1, 3033 Amount=12, 2981}
7-6: ProtectionZone, Content={415, 3033 Amount=1, 3098, 2981}
7-7: ProtectionZone, Content={415, 1306}
7-8: ProtectionZone, Content={415, 3658, 3661, 3061}
7-9: ProtectionZone, Content={415, 3027 Amount=1, 3440, 3042 Amount=25}
7-10: ProtectionZone, Content={415, 3034 Amount=1, 3032 Amount=19, 3324, 3434}
7-11: ProtectionZone, Content={415, 3034 Amount=1, 3028 Amount=20, 3324, 3434}
7-12: ProtectionZone, Content={415, 2866 Content={3577 Amount=12, 3582 Amount=63, 2867 Content={3582 Amount=100, 3582 Amount=100, 3582 Amount=100, 3582 Amount=100, 3582 Amount=100, 3582 Amount=100, 3582 Amount=100, 3582 Amount=100, 3582 Amount=100}, 3577 Amount=100, 3577 Amount=100, 3577 Amount=100, 2866 Content={3724 Amount=1, 3589 Amount=48, 3594, 3584 Amount=3, 3591 Amount=10, 2977, 2871 Content={3593, 3593, 3593, 3593, 3593, 3593, 3593, 3593, 3593}, 3598 Amount=10, 3586 Amount=26, 3587 Amount=70, 3585 Amount=13, 3597 Amount=5, 3596 Amount=2, 3595 Amount=46, 3590 Amount=16, 3602 Amount=2, 3600 Amount=54}, 2869, 2871, 2864 Content={3731 Amount=19}, 2863 Content={2871 Content={3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100}, 2871 Content={3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100}, 2871 Content={3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100}, 2871 Content={3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100}, 2871 Content={3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100, 3492 Amount=100}}, 3583 Amount=100}}
7-13: ProtectionZone, Content={415, 3010, 3668, 3061}
7-14: Content={415, 1314}
7-15: Content={1316, 1314}
7-16: ProtectionZone, Content={231, 1966}
7-17: Refresh, Content={936, 1967}
7-18: Refresh, Content={231}
7-19: Refresh, Content={231}
7-20: Refresh, Content={4629}
7-21: Refresh, Content={4624}

我意识到我还没有实现所有的东西,但我到目前为止是正确的吗?

这是我到目前为止写的语法:

tile            ->    num-num: tile_tail

tile_tail       ->    ProtectionZone, tile_tail
                ->    Refresh, tile_tail
                ->    cont

cont            ->    Content={num cont_tail

cont_tail       ->    , num cont_tail
                ->    , num key=num cont_tail
                ->    , num cont cont_tail
                ->    }

key             ->    Amount
                ->    Charges
                ->    PoolLiquidType
                ->    RemainingExpireTime  

num             ->    [0-9]+

我想编写一个 LL(1) 解析器,因为它是最简单的方法。

您的语法不是 LL(1):在 cont_tail 的开头,前瞻的 1 个符号不足以区分前三个备选方案。 (即使 2 也是不够的。)但是,您应该能够将这些替代方案左因化以得出 LL(1) 的语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM