Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Нарушитель
430 / 180 / 41
Регистрация: 13.07.2017
Сообщений: 4,582
Записей в блоге: 14

Unnamed2 Preview 1.0 (Pre-Pre-Alpha). Можете пробовать плоды с дерева нового потомка BCPL

17.10.2020, 18:36. Показов 4069. Ответов 65
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Интересно, когда вы читали, что "посеяны семена нового потомка BCPL", что "дерево засияло цветами", что "завязались плоды", вы верили, что это не болтовня? Мне, например, сложно сказать, как отнесся бы я, если бы увидел такое со стороны. Но в моем случае это ПРАВДА!!! И сейчас вы в этом убедитесь. Титанический труд длительностью больше, чем полтора года, хоть и с перерывами - и можете пробовать так долго обещаемые плоды! И, к слову, developer123 соврал, когда написал, что я точно не могу придумать что-то без названия. Хотя у языка было много названий - и C↑ᶜC, и C#++, и C with stations - но все они оказались неудачными, и текущая версия не имеет названия (номер 2 программа имеет, так как программа с именем Unnamed1 проектировалась, но не вышла в свет). В будущем я планирую дать языку какое-то название, связанное с C# (но название C#++ не подходит из-за ассоциации с "симбиозом плюсов и шарпа"). Надеюсь, мне удастся создать удобный, профессиональный, мультипарадигмальный, ультра-высокоуровневый язык с низким порогом вхождения в основы.
Несмотря на то, что это версия Pre-Pre-Alpha, но на этом языке уже можно запрограммировать примитивную программу, и он уже имеет некоторые рабочие преимущества перед C#. Среди них операторы !! (эквивалент x = !x) и CombineWith (вычисляет оба операнда, возвращает правый), функции Chain() и Mean(), полуфункция-полуоператор Q() (возвращает собственный код программы), намного более простое выполнение кода, записанного в строку, несоизмеримо бОльшие возможности глубокой рекурсии (на моем компьютере тест показал, что 1.3М - не предел) и намного более редкие вылеты (особенно в сравнении с последними версиями Visual Studio). В списках ниже перечислено, что уже работает, что нет, если что-то может быть непонятно, в скобках приводятся пояснения:
Что уже проверено и работает:
1. Не транслятор, который просто исполняет, а полноценный четырехпроходный компилятор: лексический анализ (разбивает на лексемы), предварительный анализ (выделяет классы и функции), основной анализ (строит синтаксическое дерево) и вычислительный анализ (оптимизирует синтаксическое дерево). Список ошибок в большинстве случаев работает корректно.
2. Следующие операторы: + - * (в том числе между строкой и числом) / % pow == > < >= <= != ++ -- >> << ! n! !! ~ & | ^ && || ^^ (бинарный, true ^^ true ^^ true возвращает true) and, or, xor (N-арный, true xor true xor true возвращает false) = CombineWith () sin, cos, tan, asin, acos, atan, ln += -= *= /= %= pow= &= |= ^= >>= <<= Infty, -Infty, Uncty, Pi, E.
3. Следующие функции: Chain() (цепь целых чисел в заданных границах), Choose() (выдает ошибки, но работает), FillList() (заполняет список одинаковыми значениями), ListWithSingle() (выдает ошибки, но работает), Abs(), Ceil(), Clamp() (эквивалентно Max(parameter2, Min(parameter1, parameter3))), Fibonacci(), Floor(), Frac(), IntRandom(), IntToReal() (принудительно преобразует целое число в действительное), Log() (с двумя параметрами), Max(), Max3(), Mean(), Mean3(), Min(), Min3(), Random(), RealRemainder(), Round(), Sign(), Truncate(), string.Compare(), string.Concat(), string.Join().
4. Следующие полуфункции-полуоператоры: ExecuteString(), Q().
5. Следующие типы: null, bool, short int, unsigned short int, int, unsigned int, real (длиной 8 байт), string.
6. Блоки в фигурных скобках.
7. Пользовательские классы и функции (с ограничениями). Пример объявления:
Code
1
2
3
4
5
6
7
8
9
10
11
12
Class MyClass //Class - с большой буквы
{
    unsigned int Function F1(unsigned int n) //Слово Function обязательно
    {
        return n * 2;
    }
 
    null Function F2()
    {
        return null; //Просто "return;" не катит
    }
}
8. Условия.
9. Возвраты.
10. Вызовы функций (как встроенных, так и пользовательских).
11. Автоматическое преобразование нескольких конкатенаций строк в одно объединение списка строк.
12. В случае применения некоторых операторов к константам они вычисляются на этапе компиляции.
13. Среда исполнения, можно сказать, полностью построена на try-catch, поэтому вероятность вылета ничтожна. Скорее всего, просто не вычислится одна функция или не присвоится значение одной переменной с выдачей соответствующего сообщения, так как большинство рискованных операций обернуты в свои блоки try-catch. В более тяжелом случае произойдет крах, и может также быть указанным место поломки (а может и не быть указанным), так как каждый этап компиляции и исполнения обернут в глобальный блок try-catch. Наконец, экстремальная ситуация, когда, например, не удалась инициализация списка, симулирующего стек вызовов - пишется, что произошла серьезная ошибка и программа не выполнена.
Что уже проверено и не работает:
1. Модификаторы доступа. Иногда их применение не выдает ошибку, но в любом случае все классы и функции являются открытыми.
2. Глобальный доступ (public).
3. Модификаторы параметров ref, out и params, а также ref в других местах кода.
4. Тернарные операторы.
5. Индексы и диапазоны.
6. Субординация классов.
7. Константы.
8. Конструкторы и деструкторы.
9. Рекурсивный тип.
10. Циклы. Вместо них можно использовать рекурсию или конструкцию ExecuteString("<SomeAction>" * <NumberOfIterations>);.
11. Операторы break и continue.
12. Оператор goto. Это плохой оператор, он ухудшает структуру кода, и мой язык отказался от его использования умышленно.
13. Комментарии. В примерах из этого сообщения они присутствуют, но если вы хотите протестировать эти примеры, комментарии придется убрать.
Что уже проверено и работает с ограничениями:
1. Все классы и функции являются безэкземлярными (oxyet).
2. Встроенные экземплярные функции также не могут быть вызваны.
3. Свойства. Работают только автосвойства, не работают свойства только для чтения, и чтобы обратиться к свойству, указывать содержащий его класс обязательно! Примеры допустимых объявлений и обращения к свойствам:
Code
1
2
3
4
5
6
7
8
9
10
11
Class MyClass
{
    int property = 3;
    real property2{ get, set } = 2;
    short int property3{ get } = -8; //Так нельзя
 
    real Function F()
    {
        return MyClass.property + MyClass.property2;
        return property + property2; //Так нельзя
    }
4. Списки. Можно вернуть список, использовать его во встроенной функции (например, string.Join()), вернуть из встроенной функции (например, Chain()), но нельзя пользоваться массивными и списочными типами и обращаться к элементу списка под каким-либо индексом.
5. Вследствие предыдущего пункта, не работает выполнение строки с параметрами (так как список параметров имеет списочный тип). Вместо этого можно использовать внедрение параметров прямо в код в строке, они будут неявно преобразованы в тип string.
6. Отсутствует универсальный оператор явного преобразования. Можно только использовать функцию IntToReal(), ее сокращение - суффикс "r" для чисел (1 / 3 вернет 0, а 1r / 3 - 0.333...) и такие конструкции, как n + "" или s - 0, а также присваивание переменной нужного типа.
7. Оператор is работает только с null и типами, причем не создает переменной с результатом преобразования в нужный тип (конструкция a is type b не работает). Вследствие того, что получаемая переменная не всегда фиксируется, вы можете обнаружить, что значение переменной не того типа, которым эта переменная была объявлена (например, после присваивания int a = 5; a имеет тип не int, а short int).
8. Могут быть проблемы с вложенными условиями без блоков, лучше не рисковать и вложить второе условие в блок.
9. Ключевые слова Class и Function пишутся с прописной буквы.
10. Пользовательские пространства имен находятся в разработке, пока что работают просто как безымянные блоки (нельзя обратиться к члену пространства имен снаружи).
11. Не работают многие виды ошибок и особенно предупреждений. Вообще маловероятно встретить предупреждение. Хотя фундаментальные ошибки работают.
12. Список ошибок работает на конкатенации строк, поэтому каждая ошибка ведет к его пересозданию, и при большом количестве ошибок компиляция может зависнуть. Например, на моем компьютере, если будет около 280 ошибок, компиляция, вероятно, будет длиться где-то 5 минут.
13. Вследствие того, что язык является ультра-высокоуровневым, и того, что за все в этой жизни надо платить, он работает существенно медленнее просто высокоуровневых языков, так же, как высокоуровневые языки - существенно медленнее низкоуровневых. Особенно он тормозит на рекурсии, которая работает в куче, а не в стеке вызовов: например, такой код:
Code
1
2
3
4
5
6
7
8
9
real Function F(unsigned int n)
{
    if (n <= 1)
    {
        return n;
    }
    return F(n - 1) + F(n - 2);
}
return F(20);
- на моем компьютере выполняется 22 минуты.
Все остальное не проверено и, скорее всего, не работает.
Также расширился список будущих возможностей языка:
1. Составные неравенства, такие же, как уже есть в математике и в Пайсене. Например, вместо x >= 0 && x < 10 можно будет написать 0 <= x < 10. С переменной x польза этого не так заметна, а вот если ее имя - что-то в стиле result_of_caculation_of_riemann_zeta_function, польза очевидна. В случае множества разных операторов сравнения производятся попарно между соседними операндами и комбинируются оператором &&, например, a > b < c == d >= e != f раскроется в a > b && b < c && c == d && d >= e && e != f.
2. Кроме оператора is, означающего "x является такого-то типа", также оператор maybe, означающий "x может быть такого-то типа", и оператор mbls, означающий "x может быть такого-то типа без потерь". Например, 3.14159 is string вернет false, а 3.14159 maybe string и 3.14159 mbls string - true. В то же время, например, 3.14159 mbls int вернет false. Оператор maybe практически всегда возвращает true, так как в моем языке система типов очень открытая. Но если вы попытаетесь написать, например, 3.14159 maybe Func[string, long long, int], скорее всего, получите false.
3. Операторы is-группы, проверяющие преобразование не только всей переменной к какому-либо типу, но и части этой переменной. Пример: s is "Function " + string name, number mbls 1 << int exp (проверяет, является ли number степенью 2), a maybe int b + 5 (последний пример, вопреки предсказаниям некоторых прочитавших, не всегда будет возвращать только true; конечно, если a типа int, то всегда; но если представить себе, что a имеет, например, тип real, как получить false, становится очевидным). Данная конструкция делает проверку в две стороны: 1 - выполняет обратную операцию и ищет кандидатов на результат, 2 - выполняет прямую операцию и проверяет, получено ли исходное значение, причем maybe допускает переполнение, is и mbls - не допускают. Поддерживаются только следующие операторы: + (для чисел и строк) "-" * / % pow >> << & | ^ concat (аналог + для коллекций, как ✠ в бывшем C↑ᶜC). Может быть создана только одна переменная, так что даже не пытайтесь проверить язык на прочность решением кубического уравнения в стиле number is 5 * real x pow 3 - 2 * x * x - 21 * x + 4 или тем более факторизацией number is long long x * long long y - это не выйдет! Также нельзя использовать функции, только операторы.
4. Очередной шаг к сближению обычной коллекции и полиморфизма: списки (словари, хэш-таблицы, ...) однотипных классов и функций (не лямбда-выражений, а функций!), как в примере:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
() (public sealed Class : IUnsignedIntegerNumber) numberTypes = (
{
    unsinged int a, b, c;
},
{
    unsigned int a, b, c, d, e;
},
{
    () unsigned int list;
});
Dictionary[(typename T, int n), oxyet multiconst string Function(real x, real y)] myFunctions = ((int, _),
{
    return "!#" + myFunctions[_, n](x, y);
}), ((real, _),
{
    return "!@" + myFunctions[_, n](x, y);
}), (((string, _),
{
    return "!$" + myFunctions[_, n](x, y);
}), ((_, 1),
{
    return x + y;
}), ((_, 2),
{
    return x * y;
}), ((_, 3),
{
    return x pow y;
}), ((_, unsigned int m + 1),
{
    return myFunctions[_, m](x, myFunctions[_, n](x, y - 1));
}), ((_, _),
{
    return 0;
}), (_,
{
    return null;
}));
Пояснения: первая часть содержит список классов. Так как имя общее для всех элементов, оно указывается после взятых в скобки модификаторов класса, а не, как обычно, после слова Class. При этом, если попытаться так определить один класс, ничего не получится:
Code
1
2
3
4
5
//Так не получится
(public sealed Class : IUnsignedIntegerNumber) myNumberType =
{
    unsinged int a, b, c;
}
Во второй части содержится более хитрая конструкция - словарь функций. Символ _ означает "все не перечисленные возможные значения", то есть, например, (string, _) означает "тип string в сочетании в любым числом", так как ни одно число в сочетании с типом string не перечислено. Также можно перенаправить выполнение из одной "ячейки" коллекции в другую, в том числе в не перечисленную, что и делается. Также можно обратиться по индексу, который прямо не перечислен, но удовлетворяет некоторому выражению (обращение к такому индексу эквивалентно проверке индекса _ оператором mbls) (в данном случае unsigned int m + 1). Кроме того, индексы _ и (_, _) - не одно и то же: первый работает абсолютно с чем угодно, второй не работает, например, если весь кортеж равен null. Теперь (хотя не знаю, когда удастся это реализовать) Dictionary является фундаментальным оператором языка вместо template, и списки, хэш-таблицы и прочие опираются именно на Dictionary. Если так будет продолжаться дальше, скоро отпадет необходимость в слове "полиморфизм", так как это будет просто коллекция классов или функций.
5. Оператор ".=", присваивающий какому-либо гиперимени свойство или метод этого же гиперимени ("a.=Property" эквивалентно "a = a.Property").
Так как последнее бывшее в употреблении название языка - C with stations, то там, где в сообщениях об ошибках встречается название языка, используется именно это название, так как название "Unnamed2" в сообщении об ошибке - как-то не красиво.
Вложения
Тип файла: rar Unnamed2 Preview 1.0.rar (131.3 Кб, 6 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.10.2020, 18:36
Ответы с готовыми решениями:

Старое и новое о C↑ᶜC. На дереве нового потомка BCPL завязались плоды
И снова всем привет! Развитие C↑ᶜC продолжается. Странное, конечно, это дерево - цветы на нем расцветают в октябре, плоды завязываются в...

Вставка тега <pre></pre> в файлы директории
Здравствуйте, форумчане! Не подскажете как можно средствами php вставить тег &lt;pre&gt;&lt;/pre&gt; во все текстовые файлы в директории...

Pre-alpha Season Unreal Tournament
Качаю последнюю версию, которая уже в разработке, потому что 3 для меня не актуальна - накувыркался с ботами с тройки достаточно, в онлайне...

65
Нарушитель
430 / 180 / 41
Регистрация: 13.07.2017
Сообщений: 4,582
Записей в блоге: 14
17.10.2020, 18:50  [ТС]
Вот работающие примеры кода на этом языке:
Code
1
2
3
4
5
6
int a = 3;
{
    {
        return -(a + 2);
    }
}
Code
1
return Q();
Code
1
return Q() + Q() + Q() + Q();
Желательно исполнить два раза - один раз завершить переводом строки, другой нет!
Code
1
return string.Join(null, (1, 2, 3, 4, 5));
Code
1
return string.Join(", ", (1, 2, 3, 4, 5));
Code
1
return Choose(10, 20, 50, "A", "N", null);
Code
1
2
3
4
5
6
7
8
9
real Function F(unsigned int n)
{
    if (n <= 0)
    {
        return 1;
    }
    return IntToReal(n) * F(n - 1);
}
return F(25);
Функция IntToReal обязательна!
А такой пример выдает множество ошибок на всех уровнях, благодаря чему вы можете проверить компилятор, и в качестве бонуса, может выдать также и результат:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Namespace MyNamespace {
oxyet Class Class1 {
oxyet Class Class2{}protected oxyet (real, string S, int) property{ get, set } = (3.14159, "asdfg", 123);short int property2 = 0;list(3)System.Func[(real, string), (System.Predicate[Class2], long int)] Function F() {
string.Join(", ", (1, 2, 3, 4, 5));
if (int a == null) {
typename T = real;
T n = 5;
{F[real](3.14159, 2.71828)[1];goto l0;n = 1 + 2 - 3 + 4 * 5 / 3 * string s * 6 / 2 % 7 * 8 - 9 + 10 * 2 + (string s2 = "abc") + 11 / 3 + "5" + 12 * n.n[2].Max(1, 2) && 1 == 1;Station #s1;}return 5;
}
else if (a is null) {
return 10;
}
else {
return 12;
}
}
real Function F(real a) {
if (a == null) {
return 5;
}
else {
return 10;
}
}
int Function Max(null) {{int Function F(null) {}}
if (int a == null) {
return 5;
}
else {
return 10;
}
}
}
Class1.property2++;
return Class1.property2 + ExecuteString("return Class" + (int a = 1) + ".F();");
}
Надеюсь, мой труд не пропал напрасно.
0
628 / 392 / 135
Регистрация: 06.03.2017
Сообщений: 1,469
17.10.2020, 22:46
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Что уже проверено и не работает:
Так исправьте и дайте людям готовую версию. Зачем нам вот эти клочки работы показывать?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
oxyet
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
18.10.2020, 01:06
Etyuhibosecyu, большинство языков программирования сейчас (если не все) - open source проекты. Вы можете показать нам код этого "компилятора"?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,028
Записей в блоге: 1
18.10.2020, 08:43
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
Вы можете показать нам код этого "компилятора"?
Да ты шо, он пади суперзачичённай и платнай.
0
Эксперт .NET
 Аватар для Usaga
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,137
18.10.2020, 08:52
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
намного более простое выполнение кода, записанного в строку,
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
конструкцию ExecuteString("<SomeAction>" * <NumberOfIterations>);.
Вас так и тянет на эту фигню и совершенно не парит тот факт, что нормальным программистам эта фича совершенно не нужна?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
1. Все классы и функции являются безэкземлярными (oxyet).
Это как? Все классы статические? Так это процедурный подход)
0
Нарушитель
430 / 180 / 41
Регистрация: 13.07.2017
Сообщений: 4,582
Записей в блоге: 14
18.10.2020, 09:25  [ТС]
Цитата Сообщение от Pilarentes Посмотреть сообщение
Так исправьте и дайте людям готовую версию.
Что значит "готовую"? Язык не ограничен в своем развитии, "готовых" версий у него нет. Если бы я объявил, что какая-то версия "готовая", язык моментально отстал бы от хода событий в мире.
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
Вы можете показать нам код этого "компилятора"?
1. Допустим, что могу. И даже покажу маленький кусок. Но уверен, что вы там ничего не поймете.
2. Вы можете просмотреть и весь код. Он никуда не спрятан, обфускации или чего-то такого нет. Но опять же, вы ничего не поймете в моем коде.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
    else if (cDisplayClass170.task == "condition")
    {
        if (cDisplayClass170.pos >= cDisplayClass170.end)
        {
            List<string> erMstack = cDisplayClass170._ErMStack;
            int stackpos = cDisplayClass170._Stackpos;
            erMstack[stackpos] = erMstack[stackpos] + "Error in line " + this.lexems[cDisplayClass170.pos - 1].line_n.ToString() + " at position " + (this.lexems[cDisplayClass170.pos - 1].pos + this.lexems[cDisplayClass170.pos - 1].string_.Length).ToString() + ": unexpected end of code reached\r\n";
            cDisplayClass170._TBStack[cDisplayClass170._Stackpos] = new TreeBranch();
            cDisplayClass170._SuccessStack[cDisplayClass170._Stackpos] = true;
        }
        else if (this.lexems[cDisplayClass170.pos].type == Lexem.LexemType.Keyword && this.lexems[cDisplayClass170.pos].string_ == "if")
        {
            cDisplayClass170.pos++;
            cDisplayClass170._TBStack[cDisplayClass170._Stackpos] = new TreeBranch("if", cDisplayClass170.pos - 1, cDisplayClass170.container);
        }
        else if (this.lexems[cDisplayClass170.pos].type == Lexem.LexemType.Keyword && this.lexems[cDisplayClass170.pos].string_ == "else")
        {
            cDisplayClass170.pos++;
            if (cDisplayClass170.pos >= cDisplayClass170.end)
            {
                List<string> erMstack = cDisplayClass170._ErMStack;
                int stackpos = cDisplayClass170._Stackpos;
                erMstack[stackpos] = erMstack[stackpos] + "Error in line " + this.lexems[cDisplayClass170.pos - 1].line_n.ToString() + " at position " + (this.lexems[cDisplayClass170.pos - 1].pos + this.lexems[cDisplayClass170.pos - 1].string_.Length).ToString() + ": unexpected end of code reached\r\n";
                cDisplayClass170._TBStack[cDisplayClass170._Stackpos] = new TreeBranch();
                cDisplayClass170._SuccessStack[cDisplayClass170._Stackpos] = true;
                goto label_846;
            }
            else if (this.lexems[cDisplayClass170.pos].type == Lexem.LexemType.Keyword && this.lexems[cDisplayClass170.pos].string_ == "if")
            {
                cDisplayClass170.pos++;
                cDisplayClass170._TBStack[cDisplayClass170._Stackpos] = new TreeBranch("else if", cDisplayClass170.pos - 1, cDisplayClass170.container);
            }
            else
            {
                cDisplayClass170._TBStack[cDisplayClass170._Stackpos] = new TreeBranch("else", cDisplayClass170.pos - 1, cDisplayClass170.container);
                cDisplayClass170._ErMStack[cDisplayClass170._Stackpos] += cDisplayClass170.error_message;
                cDisplayClass170._SuccessStack[cDisplayClass170._Stackpos] = true;
                goto label_846;
            }
        }
        else
        {
            List<string> erMstack = cDisplayClass170._ErMStack;
            int stackpos = cDisplayClass170._Stackpos;
            erMstack[stackpos] = erMstack[stackpos] + "Error in line " + this.lexems[cDisplayClass170.pos].line_n.ToString() + " at position " + this.lexems[cDisplayClass170.pos].pos.ToString() + ": expected: \"if\" or \"else\"\r\n";
            cDisplayClass170._SuccessStack[cDisplayClass170._Stackpos] = false;
            goto label_846;
        }
        if (cDisplayClass170.pos >= cDisplayClass170.end)
        {
            List<string> erMstack = cDisplayClass170._ErMStack;
            int stackpos = cDisplayClass170._Stackpos;
            erMstack[stackpos] = erMstack[stackpos] + "Error in line " + this.lexems[cDisplayClass170.pos - 1].line_n.ToString() + " at position " + (this.lexems[cDisplayClass170.pos - 1].pos + this.lexems[cDisplayClass170.pos - 1].string_.Length).ToString() + ": unexpected end of code reached\r\n";
            cDisplayClass170._TBStack[cDisplayClass170._Stackpos] = new TreeBranch();
            cDisplayClass170._SuccessStack[cDisplayClass170._Stackpos] = true;
        }
        else if (this.lexems[cDisplayClass170.pos].type == Lexem.LexemType.Other && this.lexems[cDisplayClass170.pos].string_ == "(")
        {
            cDisplayClass170.pos++;
            LexemStream.\u003CMainParse\u003Eg__IncreaseStack\u007C17_0("expr", "condition2", cDisplayClass170.pos, true, true, -1, -1, "", false, (TreeBranch) null, false, false, (TreeBranch) null, (object) null, (object) null, (Stack<Constructions.Block>) null, -1, -1, -1, ref cDisplayClass170);
            continue;
        }
        List<string> erMstack = cDisplayClass170._ErMStack;
        int stackpos = cDisplayClass170._Stackpos;
        erMstack[stackpos] = erMstack[stackpos] + "Error in line " + this.lexems[cDisplayClass170.pos].line_n.ToString() + " at position " + this.lexems[cDisplayClass170.pos].pos.ToString() + ": expected: (\r\n";
        cDisplayClass170._TBStack[cDisplayClass170._Stackpos] = new TreeBranch();
        cDisplayClass170._SuccessStack[cDisplayClass170._Stackpos] = true;
    }
Цитата Сообщение от Usaga Посмотреть сообщение
Это как? Все классы статические? Так это процедурный подход)
Так это только в этой версии, ну и в билдах, если будут. В Preview 1.2 это будет иначе.
Добавлено через 5 минут
К слову, исходно не обратил внимание на слово "статические", ну то есть воспринял строку целиком, а только теперь увидел это. Слово oxyet я сам придумал, и некоторым личностям оно кажется неприятным, а "статические" - это отличная замена! Я как-то всегда в C# писал его не задумываясь, а тут вы обратили на него мое внимание... Пусть будет static вместо этой мерзости.
0
Эксперт .NET
 Аватар для Usaga
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,137
18.10.2020, 09:54
Etyuhibosecyu, так у вас именно компилятор или просто транслятор?
0
Нарушитель
430 / 180 / 41
Регистрация: 13.07.2017
Сообщений: 4,582
Записей в блоге: 14
18.10.2020, 09:59  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
так у вас именно компилятор или просто транслятор?
Именно компилятор, который выдает сообщения об ошибках.

Добавлено через 3 минуты
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Именно компилятор, который выдает сообщения об ошибках.
Транслятор я почти написал за несколько дней, но потом решил, что "это не то" и что, если к этому уже были претензии, то и еще будут, и над компилятором трудился полтора года.
0
Эксперт .NET
 Аватар для Usaga
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,137
18.10.2020, 10:14
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Именно компилятор, который выдает сообщения об ошибках.
Сообщения об ошибках выдают любые компиляторы и трансляторы. А компиляторы выдают исполняемые бинарники. Поэтому повторю свой вопрос: у вас компилятор или транслятор?
0
Нарушитель
430 / 180 / 41
Регистрация: 13.07.2017
Сообщений: 4,582
Записей в блоге: 14
18.10.2020, 10:19  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
А компиляторы выдают исполняемые бинарники.
Ну если в таком прочтении, то возможно, и транслятор. Но моя программа разбивает на лексемы и строит синтаксическое дерево, а не "тупо цикл на поиск подстроки с известным транслятору набором команд", как это было с DCASTF.
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
18.10.2020, 10:20
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вы можете просмотреть и весь код. Он никуда не спрятан, обфускации или чего-то такого нет. Но опять же, вы ничего не поймете в моем коде.
А какая конечная цель этого проекта? Чисто поучиться, разобраться как работают компиляторы? Или все таки хотите сделать что-то конкурентно-способное, по типу C#, C++, Go, Java?

К какой части относится приведенный кусок кода?

И кстати, прописана ли у Вас грамматика языка, в каком то формате (BNF)?
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,018
18.10.2020, 10:23
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Транслятор я почти написал за несколько дней, но потом решил, что "это не то" и что, если к этому уже были претензии, то и еще будут, и над компилятором трудился полтора года.
Куда компилирует то? В дотнет?
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Что значит "готовую"? Язык не ограничен в своем развитии, "готовых" версий у него нет. Если бы я объявил, что какая-то версия "готовая", язык моментально отстал бы от хода событий в мире.
Готовая - значит готовая к практическому использованию. Не хотите же вы сказать, что сишарп например не готовый язык? Постоянное развитие языка и выход новых версий никак не противоречит тому, что каждая из этих версий - готовая.
У вас же, судя по списку недоделанного, до возможности практического применения еще очень далеко.
1
Нарушитель
430 / 180 / 41
Регистрация: 13.07.2017
Сообщений: 4,582
Записей в блоге: 14
18.10.2020, 10:26  [ТС]
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
Или все таки хотите сделать что-то конкурентно-способное, по типу C#
Хочу сделать следующую ступень в эволюции Си-подобных языков после C#.
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
К какой части относится приведенный кусок кода?
К основному анализу.
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
И кстати, прописана ли у Вас грамматика языка, в каком то формате (BNF)?
Что это за формат, не знаю. Когда-то была прописана в обычном TXT. Сейчас она устарела.
MrOnlineCoder, как вы думаете, обязательное ли это условие:
Цитата Сообщение от Usaga Посмотреть сообщение
компиляторы выдают исполняемые бинарники.
? Мне кажется, транслятор просто исполняет, а компилятор разбивает на лексемы и строит синтаксическое дерево, а именно создание исполняемого файла не является обязательным. Или неправда?
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,018
18.10.2020, 10:30
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Мне кажется, транслятор просто исполняет, а компилятор разбивает на лексемы и строит синтаксическое дерево, а именно создание исполняемого файла не является обязательным. Или неправда?
А как по вашему транслятор исполняет, если не разбивает на лексемы и не строит синтаксическое дерево? Они все это делают на начальной стадии.
0
Нарушитель
430 / 180 / 41
Регистрация: 13.07.2017
Сообщений: 4,582
Записей в блоге: 14
18.10.2020, 10:33  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
А как по вашему транслятор исполняет, если не разбивает на лексемы и не строит синтаксическое дерево? Они все это делают на начальной стадии.
Например, с помощью Trim и LastIndexOf ищет известные команды. Транслятор DCASTF, например, исполнял именно так.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,018
18.10.2020, 10:42
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Транслятор DCASTF, например, исполнял именно так.
Ну это ваш транслятор А все нормальные трансляторы именно что сначала полноценно анализируют исходник, в том числе строят дерево, а потом уже исполняют.

Добавлено через 6 минут
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Транслятор DCASTF
Бгг, сейчас чисто из интереса загуглил ваш DCASTF - вы даже упоминания на хабре заслужили в первоапрельской статье https://habr.com/ru/post/494548/ - в числе экспериментальных и авторитетных языков. Признавайтесь, кто из местных статью тиснул?
0
Нарушитель
430 / 180 / 41
Регистрация: 13.07.2017
Сообщений: 4,582
Записей в блоге: 14
18.10.2020, 10:45  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
Признавайтесь, кто из местных статью тиснул?
Вы, наверное, это и написали? Вы уже давали мне ссылку на эту статью.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,018
18.10.2020, 10:50
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вы, наверное, это и написали? Вы уже давали мне ссылку на эту статью.
Точно не я написал, я бы запомнил И не помню чтобы ссылку давал, сам только сейчас обнаружил. Вы наверно меня с кем то перепутали.

Добавлено через 1 минуту
А, нет, я давал Какие из этих возможностей вам хотелось бы видеть в языке?, склероз таки
Но я тогда не обращал внимания на упоминание там вашего DCASTF, тогда сама статья просто в тему пришлась.
0
Нарушитель
430 / 180 / 41
Регистрация: 13.07.2017
Сообщений: 4,582
Записей в блоге: 14
18.10.2020, 11:34  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
А все нормальные трансляторы именно что сначала полноценно анализируют исходник, в том числе строят дерево, а потом уже исполняют.
Ну, значит, у меня транслятор. Но, как минимум, более "нормальный", чем когда-то был. Если бы новый язык транслировал так же, как тот, он был бы несоизмеримо медленнее. DCASTF, написанный на основе C++, выполнял некоторую программу за 2 минуты, а новый язык, написанный на основе Шарпа - за 2 секунды.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2020, 11:34
Помогаю со студенческими работами здесь

Вывести ответ сервера в <pre></pre>
Добрый день! Подскажите, пожалуйста, как мне в примере ниже сделать так, чтобы значение data выводилось не с помощью alert, а выводилось в...

Hash Function Efficiency v0.1 pre-Alpha (May 11th, 2017)
Вот код, для наглядности (cyberforum.ru - не сохраняет оригинал кода! может не компилироваться) комментарии не удалял... #include...

[Воздушные замки] C↑ᶜC. Посеяны семена нового потомка BCPL
Дисклеймер: в этой теме я ничего не обещаю. &quot;Посеяны семена&quot; - еще не значит, что вырастет большое дерево. Вы можете ругать (думаю, ничего...

C↑ᶜC. Дерево нового потомка BCPL засияло ярко-голубыми цветами
Сегодня, 5 октября 2019 года - великий день! Наконец перечислены все текущие, будущие, устаревшие и зарезервированные конструкции...

Обходом дерева с рекурсией (pre, in, post order) вывести число вершин, значение которых равно заданному x
Используя обход с рекурсией(pre,in,post order) вывести кол-во вершин значение которых ровно заданному x; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru