我已按照此处的说明进行操作:https ://github.com/sharwell/antlr4cs/wiki和此处:http ://www.antlr.org/wiki/display/ANTLR4/Getting+Started+with+ANTLR+v4
我已经从开头的示例中修改了我的语法,但它可以与 Java 工具(antlr4.bat 和 grun.bat)一起使用,但不能与 sharwell wiki 配置的我的控制台应用程序一起使用。
Java(在只有 Hello.g4 文件的文件夹内):
antlr4 Hello.g4
javac *.java
grun Hello prog -gui
I then type "hello world" then Return then "^Z" then Return
The gui pops up an matches my grammar correctly
C#(唯一的区别是在 Java 版本中不使用 @parser 和 @lexer 指令)
你好.g4:
grammar MetaMeta;
@parser::members
{
protected const int EOF = Eof;
}
@lexer::members
{
protected const int EOF = Eof;
protected const int HIDDEN = Hidden;
}
prog : stmt NL* EOF;
stmt : hello eos;
hello : HELLO ID;
eos : ';' | NL;
HELLO : 'hello';
ID : [a-z]+;
NL : '\r'? '\n';
WS : [ \t]+ -> skip;
程序.cs:
private static void Main(string[] args)
{
(new Program()).Run();
}
public void Run()
{
var text = "hello world\n";
try
{
Console.WriteLine("START");
RunParser(text);
Console.Write("DONE. Hit RETURN to exit: ");
}
catch (Exception ex)
{
Console.WriteLine("ERROR: " + ex);
Console.Write("Hit RETURN to exit: ");
}
Console.ReadLine();
}
private void RunParser(string text)
{
var input = new AntlrInputStream(text);
var lexer = new MetaMetaLexer(input);
var tokens = new CommonTokenStream(lexer);
var parser = new MetaMetaParser(tokens);
var context = parser.prog();
var visitor = new MyVisitor();
visitor.VisitProg(context);
}
运行程序时,我得到以下信息:
START
HelloVisitor VisitProg
Visit Symbol=<EOF>
DONE. Hit RETURN to exit:
我的访问者与cs wiki上的代码示例相同。谢谢你的帮助。;) 斯科特