有没有办法在不运行的情况下验证ANTLR输入文件?

发布于 2025-01-24 04:11:41 字数 593 浏览 0 评论 0原文

我有以下代码获取输入文件的输入:

var inputStream = new AntlrInputStream(File.ReadAllText(fileName));
var lexer = new LegitusLexer(inputStream);
var commonTokenStream = new CommonTokenStream(lexer);
var parser = new LegitusParser(commonTokenStream);
parser.AddErrorListener(this);

var context = parser.program();
var visitor = new LegitusVisitor(_io.GetDefaultMethods(), _io.GetDefaultVariables())
{
    Logger = _logger
};
visitor.Visit(context);

但是,当我调用Parser.Program()时,我的程序会尽可能地运行。但是,我需要一种方法来验证输入文件在句法上是正确的,以便用户可以验证而无需运行脚本(与特殊计算机运行)。

antlr4csharp是否可以轻松支持这一点?

I have the following code taking the input of my input file:

var inputStream = new AntlrInputStream(File.ReadAllText(fileName));
var lexer = new LegitusLexer(inputStream);
var commonTokenStream = new CommonTokenStream(lexer);
var parser = new LegitusParser(commonTokenStream);
parser.AddErrorListener(this);

var context = parser.program();
var visitor = new LegitusVisitor(_io.GetDefaultMethods(), _io.GetDefaultVariables())
{
    Logger = _logger
};
visitor.Visit(context);

But when I call parser.program(), my program runs as it should. However, I need a way to validate that the input file is syntactically correct, so that users can verify without having to run the scripts (which run against a special machine).

Does Antlr4csharp support this easily?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

宫墨修音 2025-01-31 04:11:41

ANTLR工具可用于lint源。

与“标准”工具运行的唯一区别是没有生成输出文件 - 警告/错误将相同。

例如(Java;字符串源内容w/手动应用文件'name'):

    Tool tool = new Tool();
    tool.removeListeners();
    tool.addListener(new YourLintErrorReporter());

    ANTLRStringStream in = new ANTLRStringStream(content);
    GrammarRootAST ast = tool.parse(name, in);
    Grammar g = tool.createGrammar(ast);
    g.fileName = name; // to ensure all err msgs identify the file by name
    tool.process(g, false); // false -> lint: don't gencode

cs实现是等效的。

The Antlr tool can be used to lint the source.

The only difference from a 'standard' tool run is that no output files are generated -- the warnings/errors will be the same.

For example (Java; string source content w/manually applied file 'name'):

    Tool tool = new Tool();
    tool.removeListeners();
    tool.addListener(new YourLintErrorReporter());

    ANTLRStringStream in = new ANTLRStringStream(content);
    GrammarRootAST ast = tool.parse(name, in);
    Grammar g = tool.createGrammar(ast);
    g.fileName = name; // to ensure all err msgs identify the file by name
    tool.process(g, false); // false -> lint: don't gencode

The CS implementation is equivalent.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文