Скомпилируйте простую строку

Вы могли бы попытаться загрузить/установить Тонкую настройку Ubuntu. Существует опция выбрать обои для экрана входа в систему (Тонкие настройки> Настройки Входа в систему). Если Ваше пользовательски выбранное изображение не отображается впоследствии, Вы, возможно, должны к sudo скопировать его в/usr/share/backgrounds каталог, затем щелкнуть правой кнопкой, изменяют полномочия соответствовать обоям по умолчанию.

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

8
задан LarsTech 28 February 2012 в 06:57
поделиться

6 ответов

Возможно использование C #. Взгляните на этот образец проекта из CodeProject.

Извлечение кода

private Assembly BuildAssembly(string code)
{
    Microsoft.CSharp.CSharpCodeProvider provider = new CSharpCodeProvider();
    ICodeCompiler compiler = provider.CreateCompiler();
    CompilerParameters compilerparams = new CompilerParameters();
    compilerparams.GenerateExecutable = false;
    compilerparams.GenerateInMemory = true;
    CompilerResults results = compiler.CompileAssemblyFromSource(compilerparams, code);
    if (results.Errors.HasErrors)
    {
       StringBuilder errors = new StringBuilder("Compiler Errors :\r\n");
       foreach (CompilerError error in results.Errors )
       {
            errors.AppendFormat("Line {0},{1}\t: {2}\n", error.Line, error.Column, error.ErrorText);
       }
       throw new Exception(errors.ToString());
    }
    else
    {
        return results.CompiledAssembly;
    }
}

public object ExecuteCode(string code, string namespacename, string classname, string functionname, bool isstatic, params object[] args)
{
    object returnval = null;
    Assembly asm = BuildAssembly(code);
    object instance = null;
    Type type = null;
    if (isstatic)
    {
        type = asm.GetType(namespacename + "." + classname);
    }
    else
    {
        instance = asm.CreateInstance(namespacename + "." + classname);
        type = instance.GetType();
    }
    MethodInfo method = type.GetMethod(functionname);
    returnval = method.Invoke(instance, args);
    return returnval;
}
16
ответ дан 3 November 2019 в 14:19
поделиться

Вы всегда можете сделать это грязным способом, используя system () и вызвав компилятор "gcc ..." или аналогичный

3
ответ дан 3 November 2019 в 14:19
поделиться

Предложение Ника хорошее, но есть альтернатива, которая, вероятно, проще в реализации (но может не подходить для всех проектов). Если вы можете предположить, что у вашего пользователя установлен компилятор, вы можете сгенерировать файл, а затем скомпилировать его с помощью его компилятора.

1
ответ дан 3 November 2019 в 14:19
поделиться

.NET-framework предоставляет несколько классов, которые предоставляют вам доступ к компиляторам и генераторам кода для C # и VB.NET, в результате чего либо сборка загружается в память, либо простой .exe-файл. . См. CSharpCodeProvider и в этой статье .

Кроме того, вы можете просто создать исходные файлы и скомпилировать их вручную (вызовы командной строки ( system ) в компилятор, make-файлы).

Относительно перевода вашего источника: вам придется использовать здесь механизмы синтаксического анализа, такие как регулярные выражения, или использовать инструмент компилятора-компилятора, такой как Coco / R, yacc и т.д. ( Обратите внимание, что в C ++ boost :: spirit также может быть весьма полезным)

1
ответ дан 3 November 2019 в 14:19
поделиться

В C # вы можете создать дерево .NET "CodeDom", а затем скомпилировать его с помощью компилятора .NET. Это дает вам полный доступ к большинству функций .NET.

См. Пространство имен «System.CodeDom» или справку MSDN для CodeCompileUnit для получения подробной информации.

1
ответ дан 3 November 2019 в 14:19
поделиться

В C ++ вы не можете использовать компилятор во время выполнения, но вы можете встроить интерпретатор в свой проект, например CINT.

5
ответ дан 3 November 2019 в 14:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: