Задать вопрос
  • С чего начать реализовывать транслятор языка?

    @nirvimel
    300px-CompilersBook2ed.png
    Ответ написан
    Комментировать
  • Ошибка в регулярном выражении?

    stackoverflow.com/questions/1732348/regex-match-op...

    Используйте любой доступный xml-парсер, например, simple_html_dom. С ним ваша конструкция будет простая и читаемая:
    foreach($html->find('img') as $img) {
          echo "Адрес страницы: " . $img->src . "\n";
          echo "Название: " . $img->title . "\n";
          echo "Описание: " . $img->alt . "\n";
    }

    Вариант с регулярным выражением корректнее было бы записать в виде получения пар ключ-значение и дальнейшей обработкой полученных данных: https://regex101.com/r/aS7qG0/1. Вам никто не гарантирует как наличие, так и порядок аттрибутов в тэге.
    Ответ написан
    Комментировать
  • Где логическая ошибка?

    GavriKos
    @GavriKos
    У вас под корнем получается отрицательное число, из за того что неправильно вычислили боковую сторону. Смотрите формулы прямоугольного треугольника. Чтобы было проще - не пишите всю формулу, разбейте ее на составные части. И дебаг будет простой.
    Ответ написан
    Комментировать
  • Для чего программисту математика?

    От задачи зависит, сайты делать не нужна, а игры, особенно графику делать нужна. Вычисление углов всяких в геокординатах надо хоть приблизительно понимать в этом деле что бы не плавать, но опять же, только если будете работать с этим.
    Ответ написан
    1 комментарий
  • Как найти расстояние от центра до стороны повернутого прямоугольника?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если его повернули на угол a, то
    A1=min(A/abs(cos(a)),B/abs(sin(a))),
    B1=min(B/abs(cos(a)),A/abs(sin(a))).
    Если приходится делить на 0, то результат деления считается равным бесконечности, а значение минимума - второму числу.
    Ответ написан
    1 комментарий
  • Как делаются скриптовые языки программирования?

    Короткий ответ: читаем книгу дракона. Есть и более навороченная литература, но начинают все с этой книги (нам по ней читали в универе курс трансляции языков).

    Длинный ответ: ваш транслятор принимает на вход последовательность символов (допустим, UTF-8 текст), "понимает" ее в соответствии со спецификацией вашего языка, и выплевывает в качестве вывода инструкции на другом языке (в виде текстового файла или файла спец. формата). Этим "друим языком" может быть язык ассемблера какой-то железной платформы (x86_64, ARM, SPARC), и результирующим файлом будет бинарник под указанную архитектуру (точнее - объектный модуль, бинарник потом будет собран линковщиком) - так компилятся, например, C/C++. "Другим языком" может быть язык виртуальной машины (LLVM/байткод Java/MSIL) - так компилятся С/C++ (если через LLVM), Java, Scala, C#, F#, VB. "Другим языком" может быть и более высокоуровневый язык - часто, чтобы не париться на начальных этапах развития языка генерацией машинного кода, делают транслятор, который генерит код на Си, и этот код на Си уже компилят известным компилятором в бинарник. Или к примеру, CoffeeScript/TypeScript транслируются в JavaScript, т.к. веб-браузеры кроме джаваскрипта исполнять пока ничего не умеют.

    Конечно же, вы можете написать интерпретатор, а не компилятор - тогда ваша программа будет сразу же исполнять инструкции на вашем языке, не генерируя какой-либо выходной файл. Так поступают довольно много систем, например Node.js. Python делает также, если отключить генерацию pyc-файлов (поправьте меня, если я ошибаюсь).

    На каком языке реализовать сам транслятор - не имеет особого значения. Более того, хорошим тоном считается реализовать на разрабатываемом языке компилятор этого же языка - это называется self-hosting. Обычно наличие компилятора языка на этом же языке считается первым этапом серьезного отношения к языку. Разумеется, первую версию компилятора нужно будет реализовать на уже существующем языке (или сделать bootstrapping, если уж вы совсем суровый разработчик).

    Т.к. в задачах разбора входного потока (parsing) уже набито очень много шишек, и люди посвятили свои жизни и научные карьеры изучению этого вопроса, то сделано и немало инструментов для помощи в разработке компилятора. Как правило, такие инструменты дают возможность описать грамматику вашего языка на некоем специализированном синтаксисе (вроде BNF), а потом по этому описанию генерят вам код лексера и парсера на удобном для вас языке (это модули, которые выполнят первичный разбор входного потока на вашем языке на токены, и построят абстрактное синтаксическое дерево (AST)). А вы уже дописываете к ним основную часть вашего компилятора. Как пример, при написании компиляторов на языке Си часто используют flex в связке с yacc/bison. Есть более комлексные пакеты, позволяющие генерить код парсеров на различных языках - ANTLR, GOLD. А можно и самому написать лексер и парсер, особенно если вы уже сделали первую версию компилятора и переписываете его на вашем же языке).
    Ответ написан
    Комментировать
  • Выбор языка для web разработки(real time). Какой вы посоветуете?

    @vilgeforce
    Раздолбай и программист
    Забудьте слова "real time" при написании кода для не real time операционной системы.
    Ответ написан
    6 комментариев
  • Почему при процессоре с разрядностью 64 бита, integer занимает 2^32 значений?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Авторам стандарта так захотелось, только и всего. Используйте int64_t. В нем гарантированно 64 бита, даже на 32 битной машине.
    Ответ написан
    1 комментарий
  • А какие вы знаете сайты где бесплатно помогут написать код?

    @Beltoev
    Живу в своё удовольствие
    Здесь тоже помогают, если человек показывает свой нерабочий код и просит помочь найти ошибку/исправить, а не НАПИСАТЬ ВСЁ за него.

    Собственно, на любом сайте (будь то QA или форум), где обитают программисты, ситуация одинакова:
    • Нужна помощь и ты сделал порядка 50%-70% работы? Не вопрос, поможем!
    • Нужна помощь, но ты ленивая задница, которая хочет всё за просто так? Дуй на fl.ru/freelansim.ru/... (нужное подчеркнуть)


    Такова природа людей из этой области: любят тех, кто стремится к знаниям, и презирают тех, кто пытается идти по пути наименьшего сопротивления.

    Судя по вопросу, ищете легких путей?
    Ответ написан
    Комментировать
  • Как переписать структуру таблиц или запросы, чтобы работал индекс для моих выборок?

    @ollisso
    Для начала объясню почему индексы в вашем случае не работают и не могут работать.

    > OR links.domain LIKE CONCAT(sites.domain, '.%')

    CONCAT - это функция, и вы работаете с результатом функции.
    Т.е. получается что в вашем запросу нужно:
    1. выбрать все строки из links
    2. подсодеденить к каждой строке по sites.domain или sites.domain результат фунции.
    => нужно посчитать каждую строку каждый раз.
    Это очень много.

    что я бы сделал:
    1. создал таблицу доменов
    в ней:
    id | main_id |domain
    1 | 1 | com.youtube
    2. | 1 |com.youtube.www
    3. | 1 |com.youtube.subdomain


    Во всех таблицах - перешёл бы на этот ключ.
    2. тогда ваша выборка сокращается до:

    SELECT links.id, links.url, sites.id AS site_id, sites.description 
    FROM links
    LEFT JOIN domains ON links.domainId = domains.id
    LEFT JOIN sites ON sites.id = domains.main_id

    (смутно понимаю что вы хотели в этом запросе, поэтому уж не обессудьте :) )

    Т.е. основной посыл:
    переходите на int- ключи

    PS: Так же это называется нормализация базы данных. Хранить много одинаковых строк - это плохо.
    Ответ написан
    5 комментариев
  • Как написать регулярное выражение?

    DrunkMaster
    @DrunkMaster
    preg_match_all("/(^|\s)один(\s|$)/",$text);
    Начало строки или окружено пробелами или конец строки
    Ответ написан
    6 комментариев
  • Для чего нужна репутация на тостере?

    kompi
    @kompi
    nullstack devoops
    Фапать. Люди всегда были падки на систему рейтингов, которая позволяет им выделиться и самоутвердиться среди себе подобных.
    Ответ написан
    2 комментария
  • Как понять теорему Евклида о бесконечном множестве простых чисел?

    Denormalization
    @Denormalization
    На вики понятнее:
    Представим, что количество простых чисел конечно. Перемножим их и прибавим единицу. Полученное число не делится ни на одно из конечного набора простых чисел, потому что остаток от деления на любое из них даёт единицу. Значит, число должно делиться на некоторое простое число, не включённое в этот набор.


    И далее по ссылке:
    Основная теорема арифметики утверждает, что любое составное число может быть разложено в произведение простых множителей
    Ответ написан
  • Какой настольный ПК выбрать для работы?

    DevMan
    @DevMan
    у вас нормальный камень. если менять, то придется еще и материнку новую брать.
    добейте памяти до 16/32 гб, поставьте ssd, 64-битную ОС и спокойно пользуйтесь им еще несколько лет как минимум.
    Ответ написан
    Комментировать
  • Как реализовать музыку при входе на сайт?

    65536
    @65536
    не делать этого, никогда
    Ответ написан
    Комментировать
  • Как записать/удалить кортеж?

    Составной первичный ключ не даст сделать дубль записи
    Ответ написан
    3 комментария
  • Каждую секунду надо отнимать -1, в чем ошибка?

    @tplus
    Используйте setInterval вместо setTimeout; передавайте не вызов функции, а саму функцию в качестве первого аргумента:

    setInterval(timeRun, 1000);

    Если потребуется остановка счётчика:
    // Запускаем и одновременно запоминаем id запущенной операции
    var timerId = setInterval(timeRun, 1000);
    ...
    // Останавливаем
    clearInterval(timerId);


    Ну и не забываем прочитать документацию: https://learn.javascript.ru/settimeout-setinterval, чтобы узнать про хитрости подсчёта времени.
    Ответ написан
    2 комментария
  • Linux, Bash, Curl, Как сохранить сесию?

    karabanov
    @karabanov Куратор тега Linux
    Системный администратор
    Сохранить куки в файл. Подставлять куки в каждый запрос.


    -b, --cookie
    (HTTP) Pass the data to the HTTP server as a cookie. It is supposedly the data previously received from the server in a "Set-Cookie:"
    line. The data should be in the format "NAME1=VALUE1; NAME2=VALUE2".

    If no '=' symbol is used in the line, it is treated as a filename to use to read previously stored cookie lines from, which should be
    used in this session if they match. Using this method also activates the "cookie parser" which will make curl record incoming cookies
    too, which may be handy if you're using this in combination with the -L, --location option. The file format of the file to read cook‐
    ies from should be plain HTTP headers or the Netscape/Mozilla cookie file format.

    NOTE that the file specified with -b, --cookie is only used as input. No cookies will be stored in the file. To store cookies, use
    the -c, --cookie-jar option or you could even save the HTTP headers to a file using -D, --dump-header!

    If this option is used several times, the last one will be used.



    -c, --cookie-jar
    (HTTP) Specify to which file you want curl to write all cookies after a completed operation. Curl writes all cookies previously read
    from a specified file as well as all cookies received from remote server(s). If no cookies are known, no file will be written. The
    file will be written using the Netscape cookie file format. If you set the file name to a single dash, "-", the cookies will be writ‐
    ten to stdout.

    This command line option will activate the cookie engine that makes curl record and use cookies. Another way to activate it is to use
    the -b, --cookie option.

    If the cookie jar can't be created or written to, the whole curl operation won't fail or even report an error clearly. Using -v will
    get a warning displayed, but that is the only visible feedback you get about this possibly lethal situation.

    If this option is used several times, the last specified file name will be used.
    Ответ написан
    Комментировать