ANTLR C# 无异常引发
本文关键字:异常 ANTLR | 更新日期: 2023-09-27 18:34:07
我开始学习如何在Visual Studio中使用antlr,但我无法获得一个基本示例!
这是我正在使用的语法:
grammar T;
options {
language=CSharp3;
TokenLabelType=CommonToken;
}
@lexer::namespace {CoolTool.CoolProject.Compiler}
@parser::namespace {CoolTool.CoolProject.Compiler}
/*
* Parser Rules
*/
compileUnit
: 'a' AFTER
;
AFTER
: 'after'
;
WS
: (' '|''r'|''t'|''u000C'|''n');
下面是实例化词法分析和语法分析器的 C# 代码
using System;
using Antlr.Runtime;
namespace CoolTool.CoolProject.Compiler
partial class TParser
{
public static void Main(String[] args)
{
TLexer lexer = new TLexer(new ANTLRStringStream("$$%$%"));
CommonTokenStream tokens = new CommonTokenStream(lexer);
TParser parser = new TParser(tokens);
parser.compileUnit();
Console.WriteLine("OK");
}
}
}
问题是,无论我传递给词法分析器/解析器什么,我都不会收到任何错误。我完全困惑为什么我没有得到"$$"的NoViableAltException?
谁能帮忙?
谢谢阿米尔
如果我
没记错的话,C# 生成的源代码在某些情况下会吞下生成的错误,您需要查询返回的对象以查看是否发生了错误。
有些错误甚至可能需要添加一些额外的代码来捕获。
2年前使用Antlr时,我遇到了类似的问题。
我会检查我是否能找到任何旧代码。
我使用 antlr3.4,并处理这样的异常:
ICharStream input = new ANTLRStringStream(_expressionString);
ExpressionLexer lex = new ExpressionLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lex);
ExpressionParser parser = new ExpressionParser(tokens);
AstParserRuleReturnScope<CommonTree, CommonToken> r = parser.expression();
if (lex.HasError)
{
throw new ExpressionException(lex.ErrorMessage);
}
if (parser.HasError)
{
throw new ExpressionException(parser.ErrorMessage);
}
您的 antlr 版本有点旧,但我认为例外可能相同