我的目标是创建一个可用于解析 DBC 文件的解析器。文件格式的语法在此处给出。
为了实现这一点,我选择了基于优秀 JSON 解析器教程的 Lark 解析器。
我根据上面的链接文档创建了一个语法文件并启动了独立的解析器生成器脚本。不幸的是,它在 30 分钟后仍在运行,并且该过程现在消耗 7.5 Gb 的内存。这当然是不可接受的。
我该怎么做才能成功生成解析器代码?
事实证明,该问题是由单个规则中的可选终端过多引起的。它可以通过将规则分解为更多来修复,但每个都具有较少的可选终端。
例如。:
start : [ "a" ["b"] ["b1"] ["b2"] ["b3"] ["c"] ["c1"] ["c2"] ["c3"] ["d"] ["d1"] ["d2"] ["d3"] ["e"] ["e1"] ["e2"] ["e3"] ["f"] ["f1"] ["f2"] ["f3"]]
取而代之:
start : [ "a" b c d e f ]
b: ["b"] ["b1"] ["b2"] ["b3"]
c: ["c"] ["c1"] ["c2"] ["c3"]
d: ["d"] ["d1"] ["d2"] ["d3"]
e: ["e"] ["e1"] ["e2"] ["e3"]
f: ["f"] ["f1"] ["f2"] ["f3"]