patrickb123 Ответов: 1

Добавление поля слияния в качестве токена в базовом интерпретаторе basicsharp C# basic


Привет я в настоящее время с использованием основных острых ссылке: https://github.com/Timu5/BasicSharp
Это базовый переводчик языка. Нам нужно использовать поля слияния в этом коде, чтобы заменить поля слияния значениями.

Например:
IF {Clients.Name} = "Patrick" THEN
#Do something
ENDIF
поле слияния должно быть настроено как токен, а затем его значение анализируется и заменяется в зависимости от его типа.

таким образом, вышеизложенное будет проанализировано и заменено следующим образом:
IF "Patrick" = "Patrick" THEN
#Do Something
ENDIF
Любая помощь была бы очень признательна, я готов пройти через это более подробно на скриншоте, если это поможет!

Что я уже пробовал:

Я попробовал приведенный ниже код из интерпретатора, так как он анализирует строку за строкой. Это одно из требований. Поскольку это можно использовать в цикле DO While, где значение базы данных может изменяться:
void Line()
    {
        string lineText = GetLine();
       // MessageBox.Show(lineText);
        string regularExpressionPattern = @"\[.*?\]";

        string inputText = lineText;
        int intVal = 0;
        double Double123 = 0.00;
        Regex re = new Regex(regularExpressionPattern);
        string finalvalue = "";
        Run_Code rc = new Run_Code();
        rc.case_ref = case_ref;
        rc.CaseTypeIndex = CaseTypeIndex;
        foreach (Match m in re.Matches(inputText))
        {
            inputText = inputText.Replace(m.Value,'"' + rc.getDBValue(m.Value.Replace("[", "").Replace("]", "")) + '"');
        }
        // skip empty new lines
        while (lastToken == Token.NewLine) GetNextToken();

        if (lastToken == Token.EOF)
        {
            exit = true;
            return;
        }

        lineMarker = lex.TokenMarker; // save current line marker
        Statment(); // evaluate statment

        if (lastToken != Token.NewLine && lastToken != Token.EOF)
            Error("Expect new line got " + TranslateToken(lastToken.ToString()));
    }

1 Ответов

Рейтинг:
1

Gerry Schmitz

Почему бы вам не использовать "правильный" (заменяющий) токен, например $CLIENT или что-то еще (вместо имени переменной)?

...Replace( "$CLIENT", xxx ).

(И считайте весь текстовый файл в строку, а не строчку за строкой).


patrickb123

Именно так я раньше справлялся с этой проблемой, однако теперь, когда я создал цикл Do While, он не работает, так как будет работать вечно, если я выполню следующий код:

Пока {клиент.Имя} <> "Патрик" DO
обновленный клиент.Имя}, "Патрик")
ENDLOOP

так как он просто будет заменен текущим значением, которое может изменяться в циклах и т. д...