antlr - 如何在 ANTLR 中设置规则选项计数

标签 antlr

我需要帮助设置规则中选项匹配的计数。 此规则示例将匹配 (rule2) 零次或多次。

rule1: 'text' ( '(' rule2 ')' )*

我知道+、*、?用于计数,但如果我希望 (rule2) 匹配 5 次怎么办?

是+、*、?语法支持的唯一计数修饰符,因此我需要在解析器监听器中强制计数?

最佳答案

what if I want the (rule2) to match 5 times?

在语法中,有 2 个选项:

1.

写5次:

rule1: 'text' '(' rule2 ')' '(' rule2 ')' '(' rule2 ')' '(' rule2 ')' '(' rule2 ')'

2.

或使用语义谓词。请参阅 ANTLR4 wiki about predicate 中的段落使用上下文相关谓词

Are +,*,? the only count modifier supported for grammar

是的,没有 (...){5} 语法可以精确匹配 5 次。

so I need to enforce count in the parser listener?

这将是(IMO)最佳选择:在解析器中,只需匹配 ( '('rule2 ')' )+,并在解析后在监听器/访问者中进行验证。

关于antlr - 如何在 ANTLR 中设置规则选项计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25212324/

相关文章:

antlr - "Human-readable"ANTLR 生成的代码?

java - 如何声明 gradle Antlr 任务输出规范以避免不必要的重建

tree - Antrl3条件树重写

thread-safety - Java 线程的 ANTLR 解析器是否安全?

c# - ANTLR 和 c# - 从哪里开始?

java - ANTLR4 - 我的语言中的可选空格

java - ANTLR/java/SDK 生成-编译-执行序列在 Windows10 命令窗口中失败

antlr - 如何在antlr中找到 token 的长度?

python - 从哪里获得 Python ANTLR 包以使用 StringTemplate?

java - 使用 TestRig 时 ANTLR 解析有效,但使用 Java 解析时失败