Генератор парсера для встроенной документации

StackOverflow https://stackoverflow.com/questions/2572846

  •  24-09-2019
  •  | 
  •  

Вопрос

Чтобы иметь систему документации общего назначения, которая может извлечь встроенную документацию нескольких языков, необходим парсер для каждого языка. Таким образом, требуется генератор парсера (который на самом деле не должен быть таким или эффективным).

http://antlr.org/ Это хороший генератор анализатора, который уже имеет ряд грамматиков для популярных языков. Есть лучшие альтернативы, то есть более простые те, которые поддерживают генерирующие парсеры для еще большего количества языков, из-за коробки?

Это было полезно?

Решение

Если вы ищете только «частичное анализ», то вы можете использовать опцию ANTLR для частично «Lex» токена и игнорировать остальные токены. Вы можете сделать это, включив filter=true в лексеров-грамматике. Затем Lexer пытается сопоставить любой токен, который вы определили в вашей грамматике, и когда он не может соответствовать одному из токенов, он продвигает один единственный символ (и игнорирует его), а затем снова пытается соответствовать одному из ваших токенов на следующий символ :

lexer grammar Foo;

options {filter=true;}

StringLiteral
  :  ...
  ;

CharLiteral
  :  ...
  ;

SingleLineComment
  :  ...
  ;

MultiLineComment
  :  ...
  ;

При правильном выполнении вы можете получить MultiLineCommentS (/* ... */) из файла Java довольно легко, не боясь от единой строки комментариев и строки- или буквальных литералов, путая вещи.

Очевидно, что ваши исходные файлы должны быть действительно, чтобы иметь возможность правильно токеризировать файл, в противном случае вы получаете странные результаты!

Другие советы

Мой компилятор использует dypgen. Это пользовательский анализатор Extrisble GLR с большим количеством обогащений, поэтому он может анализировать множество языков. Грамматика Bootstrap - EBNF, как (он поддерживает * + и? Прямо в ваших постановках). Он достаточно мощный для динамически нагрузки нагрузки, факт, факт, что мой компилятор используют: основная часть моего языка программирования имеет свой синтаксис динамически загружен при запуске компилятора.

Dypgen записывается в Ocaml и генерирует код OCAML.

Существует анализатор C ++ GLR под названием Elkhound, который достаточно мощный для анализа большинства C ++.

Однако для ваших действительных требований вам не нужно делать какие-либо серьезные анализа: регулярное выражение, соответствующий двигатель, вероятно, достаточно хорош. Googles Re2 могут быть подходящими (обеспечивает большинство функций PCRE, намного быстрее и с интерфейсом C ++).

Хотя это менее точен, достаточно хорош, потому что вы можете требовать, чтобы встроить документацию придерживаться некоторых простых форматов. Наиболее существующие встроенные документы уже делают это только для этой причины.

Где я работаю, мы использовали для использования Золотой парсер. Отказ Это намного проще, что ANTLR и поддерживает несколько языков. Мы с тех пор мы переехали в Antlr, однако, что нам нужно было сделать более сложные разборы, которые мы нашли, Antlr лучше, чем золото.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top