Skip to content

Commit ffa4534

Browse files
committed
Create README.md
Информация об ограничениях парсера.
1 parent 75de678 commit ffa4534

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

README.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
pegjs-c-plugin
2+
==============
3+
4+
Плагин для библиотеки [PEGjs](http://pegjs.org/), позволяющий сгенерировать исходный код на
5+
C89 (также известном, как ANSI C).
6+
7+
Ограничения
8+
-----------
9+
В отличие от оригинала, в Си нет автоматического управления памятью, и строгая типизация,
10+
поэтому некоторые возможности не реализованы (но, возможно, будут реализованы в будущем):
11+
12+
* Функции, генерируемые для действий, возвращают `void`. Действия не могут поменять результат
13+
разбора, поэтому используйте их только для того, чтобы что-то сделать в процессе генерации
14+
над внешними структурами. Внешнюю структуру можно получить так: `context->options`.
15+
* Семантические предикаты (`!{...}` и `&{...}`) должны возвращать `0` вместо false и любое
16+
ненулевое значение вместо `true`. Генерируемые функции возвращают значения типа `int`.
17+
* Все параметры, передаваемые в действия/предикаты имеют тип `struct Result*`, объявленный в
18+
файле `peg.h`. Так как структуры данного типа выделяются в динамической области памяти, а
19+
парсер в любой момент может начать backtracking, при котором выделенная под них память
20+
освобождается, то вы не должны сохранять эти указатели для использования где-либо за пределами
21+
действия/семантического предиката.
22+
* Так как парсер работает не с текстом, а с массивом байт, то регистронезависимые литералы/классы
23+
символов не поддерживаются. Флаг регистрозависимости игнорируется, все литералы/классы символов
24+
считаются регистрозависимыми.
25+
* Как следствие предыдущего пункта, работа с юникодными символами не поддерживается. Если такой
26+
символ будет встречен в литерале/классе символов, то как он обработается, непонятно (не проверял).
27+
28+
Дополнительные возможности
29+
--------------------------
30+
Так как плагин писался под мою нужды, он поддерживает несколько возможностей, которые я оформил,
31+
как pull-request-ы в оригинальный репозитарий. Все они доступны в [моем форке][1] в ветке [trunk][2].
32+
Еще не все реализовано, но будет (реализованное отмечено галочкой):
33+
34+
- [x] [Диапазоны][3]
35+
- [ ] Диапазоны, [разделители][4]
36+
- [ ] Namespace-ы для кода, нужно для поддержки импорта
37+
38+
[1]: https://github.com/Mingun/pegjs
39+
[2]: https://github.com/Mingun/pegjs/tree/trunk
40+
[3]: https://github.com/pegjs/pegjs/pull/265
41+
[4]: https://github.com/pegjs/pegjs/pull/267

0 commit comments

Comments
 (0)