gpt4 book ai didi

java - 仅 ANTLR 匹配声明

转载 作者:行者123 更新时间:2023-11-30 02:00:10 24 4
gpt4 key购买 nike

我正在尝试使用 ANTLR4 编写一个解析器,它应该解析 hyperledger 中的一个非常简单的模型文件。 :

asset Car identified by id {
o String id
o String model
--> Owner owner
}

participant Owner identified by id {
o String id
o String name
}

transaction Auction {
--> Car asset
o String newValue
}

我在事务中遇到问题:我无法将 Car 类型的变量命名为“asset”,该名称在语言规范中是有效的。 ANTLR 解析器不希望这样。我收到类似的异常: mismatched input 'o' expecting {'[', IDENTIFIER}我知道原因是我的语法中的 assetDeclaration,它也检测交易中的 asset 关键字。

有没有办法忽略交易中的 Assets ?或者我可以使声明更具体,以便当 Assets 位于开头并后跟字母时触发它吗?

这是我的 Assets 声明:

assetDeclaration: ASSET IDENTIFIER
(EXTENDS typeType)?
IDENTIFIED
IDENTIFIER
classBody;

还有我的交易声明:

transactionDeclaration: TRANSACTION IDENTIFIER
classBody
;

Assets 、交易等定义为:

 ASSET: 'asset';
TRANSACTION: 'transaction';
IDENTIFIED: 'identified by';
PARTICIPANT: 'participant';

其余语法与 JavaGrammar 类似,可从 GitHub 获取。

最佳答案

如果允许asset出现在允许标识符的任何地方,您只需定义identifier:IDENTIFIER | ASSET;,然后在各处使用 identifier 而不是 IDENTIFIER

如果 asset 仅在允许标识符的某些位置允许,则应在这些位置显式写入 (IDENTIFIER | ASSET)

这同样适用于任何其他也可以作为标识符合法的关键字。

关于java - 仅 ANTLR 匹配声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53143641/

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