我是语言设计和实现方面的完整入门者,而且我通常是经验不足的程序员。我正在尝试使用ANTLR4来编写自己的编程语言,但是首先我想follow a tutorial,以便对如何进行自己的项目有所了解。在链接的教程中,我尝试遵循Spreadsheet Project(项目#29-32),因为我真的很熟悉C#,并且这是唯一使用C#的教程项目。我设法很容易地创建了语法,并且在运行以下命令时它似乎可以正常编译:
antlr4 -Dlanguage=CSharp Spreadsheet.g4
这将生成所需的文件:
在这里我遇到了一些问题。也就是说,ANTLR生成的文件似乎充满了错误:
(我在这里仅显示图片,因为存在太多错误,无法全部写出。如果需要指定任何特定的错误,请告诉我,我将其写出来。)
本教程为我提供了Program
类:
using System;
using Antlr4.Runtime;
namespace AntlrTutorial
{
class Program
{
static void Main(string[] args)
{
string input = "log(10 + A1 * 35 + (5.4 - 7.4))";
AntlrInputStream inputStream = new AntlrInputStream(input);
SpreadsheetLexer spreadsheetLexer = new SpreadsheetLexer(inputStream);
CommonTokenStream commonTokenStream = new CommonTokenStream(spreadsheetLexer);
SpreadsheetParser spreadsheetParser = new SpreadsheetParser(commonTokenStream);
SpreadsheetParser.ExpressionContext expressionContext = spreadsheetParser.expression();
SpreadsheetVisitor visitor = new SpreadsheetVisitor();
Console.WriteLine(visitor.Visit(expressionContext));
}
}
}
这给党带来了许多新的错误。例如:
错误CS1729'SpreadsheetLexer'不包含带有1个参数的构造函数
似乎该行指向Spreadsheet.g4.lexer.cs
而不是生成的SpreadsheetLexer.cs
,后者确实包含构造函数。我不知道为什么要指出它在哪里,如果那是预期的功能,或者如果没有解决该如何解决。
我发现this GitHub issue似乎涵盖了类似的问题,但是我不知道我的情况是否相同,如果这样,我也不知道如何解决。
如果任何人都知道我的问题可能是什么以及如何解决它们,我将非常感谢您的投入。