gpt4 book ai didi

java - 处理解析器生成器中的迭代计数字段

转载 作者:行者123 更新时间:2023-11-30 04:49:13 27 4
gpt4 key购买 nike

在典型的解析器生成器情况下(例如 ANTLR 或 Beaver),如何处理以下情况:

0051A2B3C4D5E
0031G2T3H

这是一个 3 字符数字字段,告诉您后面有多少次重复字段。

我知道有可能进行后处理,但在某些情况下没有用,所以我试图找到解析器是否有某种方法来处理它。如果有一个解决方案涉及在读取数字字段时与解析器进行交互——以某种方式告诉它根据某个产生式读取接下来的 N 个项目,那么这是可以接受的。

最佳答案

这是否可行取决于解析器生成器。

您的词法分析器需要了解其周围环境(上下文敏感)。您只需在行的开头创建一个 Num 标记。在 ANTLR 中,您可以通过在 Num 规则前面添加谓词 getCharPositionInLine()==0 来实现这一点。

然后在您的解析器规则 line 中,只要计数器大于零(计数器为Num 的值)。

快速 ANTLR 演示:

grammar T;  

parse
: line* EOF
;

line
@init{int n = 0;}
: Num {n = Integer.valueOf($Num.text);} ({n > 0}?=> Block {n--;})*
;

Num
: {getCharPositionInLine()==0}?=> Digit Digit Digit
;

Block
: AlphaNum AlphaNum
;

Space
: (' ' | '\t' | '\r' | '\n')+ {skip();}
;

fragment Digit : '0'..'9';
fragment Letter : 'a'..'z' | 'A'..'Z';
fragment AlphaNum : Letter | Digit;

将解析您的输入:

0051A2B3C4D5E
0031G2T3H

如下:

enter image description here

关于java - 处理解析器生成器中的迭代计数字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10235138/

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