目标:
要替换我在.g4文件中定义的规则的修改文本,该文本将在输入String
的侦听器类中输入和退出
我的代码:
def textModify(input: String) = {
val loadLexer = new DSLSQLLexer(new ANTLRInputStream(input))
val tokens = new CommonTokenStream(loadLexer)
val rewriter = new TokenStreamRewriter(tokens)
val parser = new DSLSQLParser(tokens)
parser.statement()
ParseTreeWalker.DEFAULT.walk(listener, stat)
}
但是如何在只能获取上下文的enter函数中调用rewriter
?
还是可以只在textModify()
中重写它?但是rewriter.replace()
需要index
的令牌,我在调用该令牌时不知道。
我认为显示真实情况可能会更容易:
我定义了这样的规则:
proJob
: realJob
;
realJob
: job
;
job
: IDENTIFIER
| quotedIdentifier
;
quotedIdentifier
: BACKQUOTED_IDENTIFIER
;
IDENTIFIER
: (LETTER | DIGIT | '_')+
;
BACKQUOTED_IDENTIFIER
: '`' ( ~'`' | '``' )* '`'
;
我想在令牌符合规则proJob
时更改令牌的文本,例如:
输入I am a teacher.
将进入规则proJob函数,我想将teacher
修改为teacher_blahblahblah
,我该如何管理
答案 0 :(得分:0)
要在侦听器方法中使用重写器,只需将其设为侦听器的实例变量即可。然后这些方法将可以访问它。