我正在制作LR(1)解析器,并且我遇到了各个地方的性能瓶颈.
我想尝试优化解析器的数据结构,但为了做到这一点,我需要大致了解有多少状态,规则和终端符号对于(可能很复杂的)计算机语言(如C++)是合理的.
我的猜测是复杂语言的典型语法会:
但我真的不知道他们有多正确.
请注意,我假设每个规则都是非终结符号 → 符号符号 符号 ...,因此看起来像单个复合"规则" foo: (bar | baz)+实际上可能包含5个规则,而不仅仅是1个规则.
foo: (bar | baz)+
他们合理吗?如果没有,我在哪里找到一些数字?
c++ parsing lr-grammar
c++ ×1
lr-grammar ×1
parsing ×1