Lex/Yacc для C#?

Во-первых, удалите несогласованность имен переменных. НЕ СМЕШАЙТЕ ПЕРЕМЕННОЕ НАИМЕНОВАНИЕ, КАК ВЫ СДЕЛАЛИ, У ВАС ЕСТЬ ОДИН, КОТОРЫЙ НАЧИНАЕТ КАПИТАЛ, И ОДИН, КОТОРЫЙ НЕ БУДЕТ!

Я реорганизовал ваш php для всех переменных нижнего регистра и возвратил json - так что он будет дружественным к JavaScript:

PHP:

if(isset($request))
{
    $marque = $request->get('marque');
    $modele = $request->get('modele');
    $finition = $request->get('finition');
    $Debut = $request->get('debut');
    $Fin =$request ->get('fin');


    $TotalAproduire = 100;

    $Commande = DB::connection('sqlsrv2')->table('Commande_nadine')
        ->join('finition','Commande_nadine.CodeFinition','=','finition.CodeFinition')
        ->where('finition.CodeFinition',"=",$finition)
        ->where('finition.CodeModele','=',$modele)
        ->where('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',">",$debut)
        ->whereDate('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',"<",$fin)
        ->whereDate('finition.CodeMarque','=',$marque)
        ->count('Commande_nadine.RECID_NADIN');

        $PourcentageCommandee=($Commande/$TotalAproduire)*1000;

    return response()->json($PourcentageCommandee);

}
else
{ //return error response with 500 code
    response()->json("failed", 500);
}

Вместо чтобы отправить ваши данные в URL как запрос, укажите в свойстве data. Он будет отправлен как данные тела. Пожалуйста, также console.log(data); перед Ajax, чтобы убедиться, что он имеет правильные значения. Я также предоставил объяснение в коде, это само собой понятно, я надеюсь.

JS:

    var periode=$("#Période").val();
    var DebutFin = periode.split(' - ');
    var Debut = DebutFin[0];
    var Fin = DebutFin[1];
    var marque = $("#CodeMarque").val();
    var modele = $("#CodeModele").val();
    var finition = $("#CodeFinition").val();

    const data = {debut, fin, marque, modele, finition};

    // check if the output is correct! Illegal operator error means you may have done 
    // an operation that cannot be done to the datatype. E.g. multiplication, division etc 
    // on a non number datatype
    console.log(data);

    $.ajax({
        url:"home/Calculer", //remove that ugly URL an pass it as data body instead
        method:"GET",
        data: data,  //data body
        cache : false,
        datatype: "JSON",
        processData: false,
        success: function(result)
        {
            console.log(result);
            $("#CommandePasses").data('easyPieChart').update(result);
            $('span', $("#CommandePasses")).text(result);
        },
        error: function(err) {
            console.log(err);
        }
    });
20
задан kristianp 30 April 2019 в 19:23
поделиться

9 ответов

Я не уверен, что Lex/Yacc будет иметь любую справку. Вам просто будут нужны основной токенизатор и интерпретатор, которые быстрее для записи вручную. Если Вы все еще в парсинг маршрута, см. Ирония .

Как заметка на полях: Вы рассмотрели PowerShell и его commandlets?

11
ответ дан 17 October 2019 в 03:18
поделиться

Все еще ранний CTP так не может использоваться в производственных приложениях, но можно интересоваться Oslo/MGrammar: http://msdn.microsoft.com/en-us/oslo/

5
ответ дан 17 October 2019 в 03:18
поделиться

Также взгляд Antlr, который имеет поддержку C#.

8
ответ дан 17 October 2019 в 03:18
поделиться

Если Вы не боитесь альфа-версии программного обеспечения и хотите альтернативу Lex / Yacc для создания Ваших собственных языков, Вы могли бы изучить Осло . Я рекомендовал бы Вам сидеть посредством записей сессии сессий TL27 и TL31 от прошлые годы PDC . TL31 непосредственно обращается к созданию Предметно-ориентированных языков с помощью Осло.

3
ответ дан 17 October 2019 в 03:18
поделиться

Я предложил бы csflex - порт C# гибкого провода - самый известный генератор сканера Unix.

3
ответ дан 17 October 2019 в 03:18
поделиться

Я полагаю, что lex/yacc уже находятся в одном из SDKs (т.е. RTM). Или Windows или SDK Платформы.NET.

3
ответ дан 17 October 2019 в 03:18
поделиться

Coco/R является генератором компилятора с реализацией.NET. Вы могли испытать это, но я не уверен, если получение такой библиотеки работать было бы быстрее, чем запись Вашего собственного токенизатора.

http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/

3
ответ дан 17 October 2019 в 03:18
поделиться

Как Anton сказал, PowerShell является, вероятно, способом пойти. Если Вы действительно хотите закон / yacc реализация затем , у Malcolm Crowe есть хороший набор.

Редактирование: Прямая Ссылка на Инструменты Компилятора

1
ответ дан 17 October 2019 в 03:18
поделиться

Я выполнил пару небольших проектов с GPLEX / GPPG, которые представляют собой довольно простые переопределения LEX / YACC на C #. Я не использовал какие-либо другие инструменты, указанные выше, поэтому я не могу их сравнивать, но они работали нормально.

GPPG можно найти здесь и GPLEX здесь .

При этом, я согласен, полное решение LEX / YACC, вероятно, является излишним для вашей проблемы. Я бы предложил создать набор привязок с помощью IronPython: он легко взаимодействует с кодом .NET, непрограммисты, похоже, находят базовый синтаксис достаточно удобным для использования, и он дает вам большую гибкость / мощность, если вы решите его использовать.

14
ответ дан 17 October 2019 в 03:18
поделиться
Другие вопросы по тегам:

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