gpt4 book ai didi

antlr - 如何在 ANTLR 中获取完整的用户编写的语句(包括空格)

转载 作者:行者123 更新时间:2023-12-04 14:46:08 33 4
gpt4 key购买 nike

我有一个来自 Java 语言定义的“语句”定义,如下所示。

statement
: block
| ASSERT expression (':' expression)? ';'
| 'if' parExpression statement ('else' statement)?
| 'for' '(' forControl ')' statement
| 'while' parExpression statement
| 'do' statement 'while' parExpression ';'
| 'try' block
( catches 'finally' block
| catches
| 'finally' block
)
| 'switch' parExpression switchBlock
| 'synchronized' parExpression block
| 'return' expression? ';'
| 'throw' expression ';'
| 'break' Identifier? ';'
| 'continue' Identifier? ';'
| ';'
| statementExpression ';'
| Identifier ':' statement
;

在执行解析器时,我还想打印完整的用户编写的语句(包括语句中的空格),例如:
Object o = Ma.addToObj(r1);
if(h.isFull() && !h.contains(true)) h.update(o);

但是当我在“exitStatement”中使用函数“getText()”时,我只能得到所有空格都被删除的语句,例如:
Objecto=Ma.addToObj(r1);
if(h.isFull()&&!h.contains(true))h.update(o);

如何以简单的方式获得完整的用户编写的语句(包括语句中的空格)?非常感谢!

完整代码如下:
public class PrintStatements {
public static class GetStatements extends sdlParserBaseListener {
StringBuilder statements = new StringBuilder();
public void exitStatement(sdlParserParser.StatementContext ctx){
statements.append(ctx.getText());
statements.append("\n");
}
}


public static void main(String[] args) throws Exception{

String inputFile = null;
if ( args.length>0 ) inputFile = args[0];
InputStream is = System.in;
if ( inputFile!=null ) {
is = new FileInputStream(inputFile);
}
ANTLRInputStream input = new ANTLRInputStream(is);
sdlParserLexer lexer = new sdlParserLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
sdlParserParser parser = new sdlParserParser(tokens);
ParseTree tree = parser.s();

// create a standard ANTLR parse tree walker
ParseTreeWalker walker = new ParseTreeWalker();
// create listener then feed to walker
GetStatements loader = new GetStatements();
walker.walk(loader, tree); // walk parse tree

System.out.println(loader.statements.toString());
}
}

最佳答案

我已经通过在语句的上层使用 tokens.getText() 解决了这个问题,如下所示:

public void exitE(sdlParserParser.EContext ctx) {
TokenStream tokens = parser.getTokenStream();
String Stmt = null;
Stmt = tokens.getText(ctx.statement());
...

}

关于antlr - 如何在 ANTLR 中获取完整的用户编写的语句(包括空格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18966197/

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