Я - новичок в разработке и реализации языка, и в целом я неопытный программист.Я пытаюсь использовать ANTLR4 для создания своего собственного языка программирования, но сначала я хотел следовать учебному пособию , чтобы я мог понять, как подойти к своему собственному проекту.В связанном учебном пособии я пытаюсь следовать проекту электронных таблиц (пункты №№ 29-32), так как мне очень удобно только с 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
, который содержит конструктор.Я понятия не имею, почему он указывает, где он находится, если это предполагаемая функциональность, или как это исправить, если нет.
Я обнаружил эту проблему GitHub , которая, кажется, охватывает аналогичную проблему, но я не знаю, является ли моя ситуация такой же, и я не знаю, как это исправить, если так.
Если у кого-то есть какие-либо подсказки о том, какие могут быть мои проблемы и как я могу их исправить, я был бы очень признателен за ваш вклад.