Автоматически сгенерированные файлы ANTLR4 с ошибками - PullRequest
0 голосов
/ 28 ноября 2018

Я - новичок в разработке и реализации языка, и в целом я неопытный программист.Я пытаюсь использовать ANTLR4 для создания своего собственного языка программирования, но сначала я хотел следовать учебному пособию , чтобы я мог понять, как подойти к своему собственному проекту.В связанном учебном пособии я пытаюсь следовать проекту электронных таблиц (пункты №№ 29-32), так как мне очень удобно только с C #, и это единственный учебный проект, в котором он используется.Мне удалось создать грамматику достаточно легко, и, похоже, она прекрасно компилируется при выполнении этой команды:

antlr4 -Dlanguage=CSharp Spreadsheet.g4

Это создает необходимые файлы:

File System after Generation

Здесь я сталкиваюсь с некоторыми проблемами.А именно, файлы, сгенерированные ANTLR, кажутся полными ошибок:

enter image description here (я показываю здесь только рисунок, потому что ошибок слишком много, чтобы выписать их все. Если нужно указать какие-то конкретные, дайте мне знать, и я их напишу.)

В учебном пособии представлен класс 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 , которая, кажется, охватывает аналогичную проблему, но я не знаю, является ли моя ситуация такой же, и я не знаю, как это исправить, если так.

Если у кого-то есть какие-либо подсказки о том, какие могут быть мои проблемы и как я могу их исправить, я был бы очень признателен за ваш вклад.

...