Компилятор в пикс

addewyd@

Member
Набросал в выходной транслятор из... скажем, некоего языка в пикс скрипт.

Входной текст выглядит примерно так:

Код:
prog (arg1: %System.Int32, [[0]]) {

// this comment is ignored
!-- this comment goes to target

    if : text="IF" (`a && b`) {
    } else {
    }
    if(`c < d`) {
        @ThrowException(Text: `"Exception"`);
    } else {
    }
    if(`true`) {
    } else {
        @ThrowException(Text: `"Exception"`);
    }

    while: text="WHILE" (`counter < 0`) {} !-- this comment goes to target
    while(`false`) {
        @ThrowException(Text: `"Exception"`);
    }

    @Assign(To: `list`, Value: `new List(int)`);
    @ExecuteCSCode(CSCode: [[
        @"list.Add(1);
          list.Add(4);
    ]]);


    @Assign(To: `a`, Value: `100`);
    foreach : text=" FOR EACH" (x in `list`) {
        @Sleep : option=1 (Count: `a`);
    }

    try : text=" TRY " {
        @ThrowException(Text: `"Exception Message"`);
    } catch(err, stack, src)  {
        // `` and [[]] are the same
        $Interactive.MessageBox(Title: `"ex"`, Text: `err + stack + src`, Timeout: [[0]]);
    }
    try : text=" empty TRY FIX with true param " (true) {} fix (err, stack, src)  { }
}
Кому-нибудь интересно?

Мне удобно.
 

addewyd@

Member
Собственно, к чему я это всё затеял...

Предполагается написать ещё и обратный транслятор pix -> pjc

И писать там, где на данный момент удобнее.
 

addewyd@

Member
Забыл одну мелочь - контейнер (блок)
Так что апдейт.

Код:
// Где-то так
Prog5_cont() {
// empty containers
    {}
    @Container : text = "CONT" ();
// non-empty containeres
    {
!-- comment in container
    }
    {
        @Sleep  : option=1 (Count: `10`);
    }
    {{{
!-- 3 containers
    }}}
}
 

Вложения

  • 122,9 КБ Просмотры: 0

addewyd@

Member
Ещё апдейт: добавлена поддержка некоторых xmlns для value

Где-то так:
Код:
Prog6_http () {
    @Assign(To: `apiurl`, Value: `config.GetProperty("Url").ToString()`);
    @Assign(To: `login`, Value: `config.GetProperty("Login").ToString()`);
    $HTTP.HTTPResponses(Url: `apiurl + "api/auth/request/"`,
        // here:
        Timeout: `20`, Method: [`Post`] : %HTTPResponses.TypeMethod,
        PostData:
        [[@"
            {
              ""login"": """ + login + @"""
            }"]],
        ContentResult: `content`,  HeadersResult: `headers`, Status: `status`);
    $Interactive.MessageBox(Text: `content + "\n" + status`, Timeout: `2`);
}
 

addewyd@

Member
Интересные подробности выявляются.

Активность Remove Spaces (Activities.Strings.TriString)

входной параметр СonvertibleString.

Думаете, первая буква - это обыкновенная C? Ничего подобного.
Unicode Decimal Code &#1057

Короче, русская С.

Интересно, почему?

наткнулся вот тут..
$Processes.StartProcess : option = 1 (FilePath: `"node.exe"`, Arguments: `"md5.js " + salt + apikey`, Timeout: [`0`] : %int, EncodingString: [`utf-8`] : %string,
ResultProcess: `hash`);
$Strings.TrimString(СonvertibleString: `hash`, Result: `hash`);


Хотя, ненужная активность, если есть stringvariable.Trim()
 
Последнее редактирование:
Верх