ANTLR4中的一个片段能否使用另一个片段?

huangapple go评论53阅读模式
英文:

Can a fragment use another fragment in ANTLR4

问题

当我在ANTLR4中使用一个片段时,可以使用另一个片段吗?

例如,我想定义一个名为NUM_FRAGMENT的片段,它使用其他片段:

fragment DIGIT: [1-9];
fragment ZERO: [0];
fragment NUM_FRAGMENT: ZERO | DIGIT | [0-9];

在ANTLR4中是否允许上面的示例?

英文:

When I use a fragment in ANTLR4, can I use another fragment?

For example, I want to define a fragment NUM_FRAGMENT which uses other fragments:

fragment DIGIT: [1-9];
fragment ZERO: [0];  
fragment NUM_FRAGMENT: ZERO | DIGIT | [0-9];

Is the example above allowed in ANTLR4?

答案1

得分: 2

是的,片段可以使用其他片段。

在你的示例中 fragment NUM_FRAGMENT: ZERO | DIGIT | [0-9];,你可以写成 fragment NUM_FRAGMENT: ZERO | DIGIT;

请注意,规则的命名不完全正确:DIGIT 暗示它匹配任何数字(从0到9)。而 NUM_FRAGMENT 暗示它匹配一个数字,应该匹配一个或多个数字。

我会这样写规则:

fragment NON_ZERO : [1-9];
fragment ZERO     : '0';  
fragment DIGIT    : ZERO | NON_ZERO;
fragment NUM      : DIGIT+;
英文:

Yes, fragments can use other fragments.

In your example fragment NUM_FRAGMENT: ZERO | DIGIT | [0-9];, you can write fragment NUM_FRAGMENT: ZERO | DIGIT;.

Note that the naming of the rules is not entirely correct: DIGIT suggests it matches any digit (from 0 to 9). And NUM_FRAGMENT suggests it matches a number which should match one or more digits.

I'd write the rules like this:

fragment NON_ZERO : [1-9];
fragment ZERO     : '0';  
fragment DIGIT    : ZERO | NON_ZERO;
fragment NUM      : DIGIT+;

huangapple
  • 本文由 发表于 2023年2月16日 11:35:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/75467609.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定