|
Нарушитель
54 / 55 / 8
Регистрация: 01.07.2014
Сообщений: 1,021
|
|
Различия использования регулярных выражений и генераторов парсеров в GCC и MSVC29.05.2016, 00:34. Показов 1478. Ответов 12
Метки нет (Все метки)
Я слышал что G++ и MSVC используют lex и bison для построения дерева токенов и парсинга. А клэнг свой какой то язык, который обрабатывает бэкэнд. Недавно со знакомыми кодерами возник интересный разговор: Правда ли что регулярки и генераторы парсеров медленее чем обычный нативный код. На деле оказалось что нет, и даже FPC быстрее кланга оказался.
Собственно и вопрос, правда ли что оба эти компилятора используют генераторы парсеров и несмотря на совсем незначительные потери произв-сти, работают медленее чем если бы парсились на лету(как в TCC к примеру) а не компилировались сначала регулярки а потом уже проводился анализ.
0
|
|
| 29.05.2016, 00:34 | |
|
Ответы с готовыми решениями:
12
компиляция gcc и MSVC Портирование ассемблерной функции с MSVC на GCC Объясните устройство сложных вложенных выражений-генераторов |
|
|
|
| 29.05.2016, 10:00 | |
|
Если под словом "используют" подразумевается "сам компилятор написан с использованием", то можно поглядеть на исходники gcc, там есть какие-то файлы с расширением *.l, а в старых версиях были и файлы с расширением *.y (если я ничего не путаю). Когда-то я их изучал и сложилось впечатление, что там реализовано лишь некоторое подмножество языка. Да и не было полной уверенности, что оно входит именно в состав компилятора, а не в состав какой-нибудь утилиты, которая используется при сборке компилятора
Но тут есть два момента 1. Парсер в компиляторе занимает дай бог 1% времени исполнения. А потому скорость работы парсера в пределах +-100% роли не играет, а потому пофигу на чём его писать 2. lex/bison годны для написания примитивных парсеров. Синтаксис таких монстров как Си++ слишком сложен, для того, чтобы с ними работать на lex/bison. Парсер ведь не только должен распарсить, но ещё и грамотно выдать пользовательские ошибки, причем после выдачи ошибки современные компиляторы продолжают парсить (т.е. выдают несколько ошибок за раз). На lex/bison, думается, опухнешь это делать (правда не уверен в этом на все 100%) Добавлено через 2 минуты Что касается MSVC, то я более чем уверен, что тем не может быть никаких lex/bison тупо по политическим соображениям
1
|
|
|
Нарушитель
54 / 55 / 8
Регистрация: 01.07.2014
Сообщений: 1,021
|
|
| 29.05.2016, 12:33 [ТС] | |
|
Evg, есть один компилятор PHP в Java - JPHP, там все на регулярках, и работает вполне быстро. А как известно PHP имеет много общего с обычным C и немного C++(ООП в PHP не полное, шаблонов нет)
Добавлено через 49 секунд В википедии так и написано что MSVC и GCC используют лекс и бизон.
0
|
|
|
|
|
| 29.05.2016, 13:26 | |
|
Слабо понимаю, каким боком сюда относятся регулярные выражения
Про MSVC я могу только догадываться, т.к. у них исходник закрытый. Википедия - это не то место, чему можно слепо доверять. На месте микрософтеров я бы не использовал gnu'тый софт по политическим соображениям В исходниках gcc действительно есть файл от lex'а (gengtype-lex.l). Но файлов для bison'а я не вижу. Файл от lex'а довольно маленький, вряд ли он относится к самомУ компилятору. Судя по названию, он парсит какой-то из файлов *.def Я исходники смотрел тут https://github.com/gcc-mirror/gcc Более предметно можно скачать какой-нибудь исходник и собрать его. По логам сборки будет видно, для чего используется lex Парсер для Си, судя по названию - это файл gcc/c/c-parser.c, для Си++ - gcc/cp/parser.c
1
|
|
|
Нарушитель
54 / 55 / 8
Регистрация: 01.07.2014
Сообщений: 1,021
|
|
| 29.05.2016, 14:18 [ТС] | |
|
Evg, парсер C там фронтэнд только. Остальное за бэкэндом спрятано.
Добавлено через 2 минуты Охренеть. Метр кода на парсер. Готовый генератор анализаторов и парсеров для Java(ANTLR) и то меньше весит(около 700кб)
0
|
|
| 29.05.2016, 20:18 | ||
|
Не по теме:
0
|
||
|
Нарушитель
54 / 55 / 8
Регистрация: 01.07.2014
Сообщений: 1,021
|
|
| 29.05.2016, 21:18 [ТС] | |
|
Evg, GCC делится на несколько этапов: фронтэнд и бэкэнд.
Фронтэнд анализирует код и выстраивает дерево токенов, а бэкэнд уже генерирует листинг на асм и пинает его в GAS
0
|
|
|
Нарушитель
54 / 55 / 8
Регистрация: 01.07.2014
Сообщений: 1,021
|
|
| 30.05.2016, 10:59 [ТС] | |
|
Evg, черт его знает, не каждую же строку парсить?
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||||
| 30.05.2016, 11:23 | |||||
|
0
|
|||||
|
Нарушитель
54 / 55 / 8
Регистрация: 01.07.2014
Сообщений: 1,021
|
|
| 30.05.2016, 11:49 [ТС] | |
|
ct0r, на них же разбирают пыху, бэйсик и кучу других ЯП
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 30.05.2016, 13:19 | |
|
0
|
|
| 30.05.2016, 13:19 | |
|
Помогаю со студенческими работами здесь
13
Тестер регулярных выражений Шаблон регулярных выражений Несколько регулярных выражений Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|