gpt4 book ai didi

java - antlr如何以任意顺序定义可选部分

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:51 25 4
gpt4 key购买 nike

假设需要语法来解析以下模板:

1. REPORT
2. BEGIN
3. QUERY
4. BEGIN
5. AGGREGATION: day
6. DIMENSION: department
7. END
8. END

第 5 行和第 6 行是可选的,这两行的顺序无关紧要。我如何在我的语法文件中指定它?下面是我的解决方案(参见第 12 行):

1. grammar PRL;
2. report
3. : REPORT
4. BEGIN
5. query
6. END
7. ;
8.
9. query
10. : QUERY
11. BEGIN
12. (aggregation_decl dimension_decl | dimension_decl aggregation_decl)?
13. END
14. ;

所以它可以工作,但它看起来很难看,如果我有超过 2 个部分,它会很快变得难以管理吗?有什么建议吗?

最佳答案

是这样的吗?通常,您会强制每个项目中只有一个存在于稍后的处理步骤中。否则,如您所见,语法会变得笨拙。

grammar PRL;
report
: REPORT
BEGIN
query
END
;

query
: QUERY
BEGIN
body_decl*
END
;

body_decl :
aggregation_decl dimension_decl
| dimension_decl aggregation_decl;

关于java - antlr如何以任意顺序定义可选部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11199077/

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