gpt4 book ai didi

javascript - 需要有关一个 LALR(1) 解析的帮助

转载 作者:行者123 更新时间:2023-11-30 06:46:17 26 4
gpt4 key购买 nike

我正在尝试解析一种上下文无关的语言,称为 Context Free Art .我使用类似 YACC 的 JS LALR(1) 解析器生成器在 Javascript 中创建了它的解析器 JSCC .

以下面的 CFA (Context Free Art) 代码为例。此代码是有效的 CFA。

startshape A
rule A { CIRCLE { s 1} }

注意上面的 Ass是缩放CIRCLE的命令,而A只是这个规则的名称。在该语言的语法中,我将 s 设置为标记 SCALE 并且 A 位于标记 STRING 下(我有一个常规匹配字符串的表达式,它位于所有标记的底部)。

这工作正常,但在下面的情况下它会中断。

startshape s
rule s { CIRCLE { s 1} }

这也是一个完全有效的代码,但由于我的解析器将 rule 之后的 s 标记为 SCALE 标记,所以它会错误地指出它期待 STRING

现在我的问题是,是否有任何方法可以重写解析器的产生式规则来解决这个问题?相关的产生式规则是:-

rule:
RULE STRING '{' buncha_replacements '}' [* rule(%2, 1) *]
|
RULE STRING RATIONAL '{' buncha_replacements '}' [* rule(%2, 1*%3) *]
;

我能想到的一个简单解决方案是创建上述规则的副本,将 STRING 替换为 SCALE,但这只是需要的许多类似规则之一这样的固定。此外,还有许多其他终端可以匹配到 STRING。所以这意味着太多的规则!

最佳答案

是的!最后我的问题的解决方案击中了我。我需要做的就是将上面的作品修改为:-

rule:
RULE user_string '{' buncha_replacements '}' [* rule(%2, 1) *]
|
RULE user_string RATIONAL '{' buncha_replacements '}' [* rule(%2, 1*%3) *]
;

user_string:
STRING | SCALE ;

与我在问题文本中提到的相比,这是一个非常优雅的解决方案。如果有人有更好的解决方案,请发表评论。

关于javascript - 需要有关一个 LALR(1) 解析的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6452402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com