有没有一种方法来验证一个Antlr输入文件,而不运行它?



我有以下代码接受我的输入文件的输入:

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是否支持?

可以使用Antlr工具对源代码进行lint

与'标准'工具运行的唯一区别是不生成输出文件——警告/错误将是相同的。

例如(Java;字符串源内容(手动应用文件'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的实现是等价的。

最新更新