gpt4 book ai didi

javascript - 空 block 和空对象语法冲突警告

转载 作者:行者123 更新时间:2023-11-30 12:34:39 27 4
gpt4 key购买 nike

我正在尝试在 Jison 中实现一个解析器.解析器支持两个 JSON 对象:{ a: 1 } 和 block :if (true) { statement();

我的语法是这样的:

block:
: '{' '}'
| '{' statementList '}'
;

objectExpression:
: '{' '}'
| '{' properties '}'
;

blockobjectExpression 中都有一个 {} 规则,因为我需要同时支持空对象和空 block 。

它可以工作,但会输出很多警告,例如:

Conflict in grammar: multiple actions possible when lookahead token is ; in state 52
- reduce by rule: objectExpression -> { }
- reduce by rule: block -> { }

如何修复或禁止显示这些警告?

最佳答案

字符串 {} 可以解析为 block 或对象表达式。您有几个选择。

在 Javascript 解析器中,如果 blockobjectExpression 之间存在歧义,它将选择在父规则中排在第一位的那个。在以下表达式中,空 block 优先于空对象。

expression:
: block
| objectExpression
;

解析器会提示任何歧义(也称为移位/归约冲突),但它仍然可以工作。假设 Jison 解析器与 Bison 解析器兼容,使用 expect declaration抑制警告。

您还可以使 block 和 objectExpressions 仅出现在不同的上下文中(例如, block 只能出现在 if 语句或 for 语句之后)。第三种选择是取消对空对象的支持。

关于javascript - 空 block 和空对象语法冲突警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26453583/

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