{"id":17278136,"url":"https://github.com/mingun/pegjs-c-plugin","last_synced_at":"2025-03-26T14:22:15.626Z","repository":{"id":25357541,"uuid":"28785311","full_name":"Mingun/pegjs-c-plugin","owner":"Mingun","description":"Плагин для PEGjs, позволяющий сгенерировать исходный код на C89","archived":false,"fork":false,"pushed_at":"2015-01-31T17:43:36.000Z","size":404,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-31T15:40:07.911Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mingun.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-01-04T20:36:59.000Z","updated_at":"2019-08-14T21:23:27.000Z","dependencies_parsed_at":"2022-08-06T04:01:25.340Z","dependency_job_id":null,"html_url":"https://github.com/Mingun/pegjs-c-plugin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mingun%2Fpegjs-c-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mingun%2Fpegjs-c-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mingun%2Fpegjs-c-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mingun%2Fpegjs-c-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mingun","download_url":"https://codeload.github.com/Mingun/pegjs-c-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245668650,"owners_count":20653011,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T09:10:53.731Z","updated_at":"2025-03-26T14:22:15.601Z","avatar_url":"https://github.com/Mingun.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"pegjs-c-plugin\n==============\n\nПлагин для библиотеки [PEGjs](http://pegjs.org/), позволяющий сгенерировать исходный код на\nC89 (также известном, как ANSI C).\n\nAPI парсера\n-----------\nНа вход подается диапазон -- массив байт для разбора. На выходе -- древовидная структура `Result`.\nПосле окончания работы с данной структурой, надо освободить выделенную под нее память, вызвав\n`freeResult`.\n\nСтруктура `Result` содержит следующую информацию:\n\n* Регион разбираемых данных, для которого была сформирована данная структура, в том числе указатель\n  на начало и конец данных, а также информацию о строке и стобце для обоих концов (еще не реализовано).\n* Количество дочерных элементов. Все дочерние элементы охватывают регионы, которые лежат внутри\n  родительского региона.\n* Указатель на пользовательские данные. Действия могут прикреплять туда свои данные во время разбора.\n  Парсер не следит за их содержимым.\n\nОграничения\n-----------\nВ отличие от оригинала, в Си нет автоматического управления памятью, и строгая типизация,\nпоэтому некоторые возможности не реализованы (но, возможно, будут реализованы в будущем):\n\n* Функции, генерируемые для действий, возвращают `void`. Действия не могут поменять результат\n  разбора, поэтому используйте их только для того, чтобы что-то сделать в процессе генерации\n  над внешними структурами. Внешнюю структуру можно получить так: `context-\u003eoptions`.\n* Семантические предикаты (`!{...}` и `\u0026{...}`) должны возвращать `0` вместо false и любое\n  ненулевое значение вместо `true`. Генерируемые функции возвращают значения типа `int`.\n* Все параметры, передаваемые в действия/предикаты имеют тип `struct Result*`, объявленный в\n  файле `peg.h`. Так как структуры данного типа выделяются в динамической области памяти, а\n  парсер в любой момент может начать backtracking, при котором выделенная под них память\n  освобождается, то вы не должны сохранять эти указатели для использования где-либо за пределами\n  действия/семантического предиката.\n* Так как парсер работает не с текстом, а с массивом байт, то регистронезависимые литералы/классы\n  символов не поддерживаются. Флаг регистрозависимости игнорируется, все литералы/классы символов\n  считаются регистрозависимыми.\n* Как следствие предыдущего пункта, работа с юникодными символами не поддерживается. Если такой\n  символ будет встречен в литерале/классе символов, то как он обработается, непонятно (не проверял).\n\nДополнительные возможности\n--------------------------\nТак как плагин писался под мою нужды, он поддерживает несколько возможностей, которые я оформил,\nкак pull-request-ы в оригинальный репозитарий. Все они доступны в [моем форке][1] в ветке [trunk][2].\nЕще не все реализовано, но будет (реализованное отмечено галочкой):\n\n- [x] [Диапазоны][3]\n- [ ] Диапазоны, [разделители][4]\n- [ ] Namespace-ы для кода, нужно для поддержки импорта\n\n[1]: https://github.com/Mingun/pegjs\n[2]: https://github.com/Mingun/pegjs/tree/trunk\n[3]: https://github.com/pegjs/pegjs/pull/265\n[4]: https://github.com/pegjs/pegjs/pull/267\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmingun%2Fpegjs-c-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmingun%2Fpegjs-c-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmingun%2Fpegjs-c-plugin/lists"}