0

我看到的所有示例都在文件中读取 lex 并解析它。

我需要一个函数,它接受一个字符串(char *,我正在生成 C 代码)作为参数,并对其进行操作。

我怎样才能做到最好?我想过将字符串写入流,然后将其提供给词法分析器,但感觉不对。有没有更好的办法?

提前致谢

4

2 回答 2

2

您将需要使用该antlr3NewAsciiStringInPlaceStream方法。

你没有说你使用的是什么版本的 Antlr,所以我假设 Antlr v3。

这个方法的输入是要解析的字符串,它的长度,然后你可以使用 NULL 作为最后一个输入。

这会产生一个类似于antlr3AsciiFileStreamNew您用来解析文件的输入流。

我看到您提到将输入写入流。如果您可以使用 C++,那么这就是您可能会遇到的最佳方法。

这是我通常使用的准系统代码:

std::istringstream  issInput(std::cin); // make this an ifstream if you want to parse a file
Lexer           oLexer(issInput);
Parser          oParser(oLexer);

oFactory("CommonASTWithHiddenTokens",&antlr::CommonASTWithHiddenTokens::factory);
    antlr::ASTFactory oFactory;
oParser.initializeASTFactory(oFactory);
oParser.setASTFactory(&oFactory);

oParser.main();
antlr::RefAST ast = oParser.getAST();
if (ast)
{
    TreeWalker  oTreeWalker;
    oTreeWalker.main(ast, rPCode);
}
于 2009-12-09T21:44:09.210 回答
0

我认为您应该将其馈送到流中。如果您愿意,可以将其提供给标准输入。这样,您的代码不应与从文件中读取字符串相差太大。

于 2009-12-09T03:40:05.670 回答