Я пытаюсь изложить переводчик wikitext-to-HTML в ANTLR 3, но я продолжаю застревать.Рабочий пример wikitext-to-HTML в ANTLR 3
Вы знаете рабочий пример, который я могу проверить? Я попытался грамматика MediaWiki ANTLR и грамматика Wiki креольской, но я не могу заставить их генерировать лексический анализатор & в ANTLR 3.
Вот ссылки на два грамматики, я попытался с помощью:
- http://www.mediawiki.org/wiki/Markup_spec/ANTLR
- http://www.wikicreole.org/wiki/EBNFGrammarForCreole1.0
я не могу получить любой из этих двух, чтобы сгенерировать мой Java Lexer и синтаксического анализа. (Я использую ANTLR3 как плагин Eclipse). MediaWiki занимает некоторое время для сборки, а затем в какой-то момент он выдает исключение OutOfMemory. У другого есть ошибки в нем, которые я не знаю, как отлаживать.
EDIT: Хорошо у меня очень простой грамматики:
grammar wikitext;
options {
//output = AST;
//ASTLabelType = CommonTree;
output = template;
language = Java;
}
document: line (NL line?)*;
line: horizontal_line | list | heading | paragraph;
/* horizontal line */
horizontal_line: HRLINE;
/* lists */
list: unordered_list | ordered_list;
unordered_list: '*'+ content;
ordered_list: '#'+ content;
/* Headings */
heading: heading1 | heading2 | heading3 | heading4 | heading5 | heading6;
heading1: H1 plain H1;
heading2: H2 plain H2;
heading3: H3 plain H3;
heading4: H4 plain H4;
heading5: H5 plain H5;
heading6: H6 plain H6;
/* Paragraph */
paragraph: content;
content: (formatted | link)+;
/* links */
link: external_link | internal_link;
external_link: '[' external_link_uri ('|' external_link_title)? ']';
internal_link: '[[' internal_link_ref ('|' internal_link_title)? ']]' ;
external_link_uri: CHARACTER+;
external_link_title: plain;
internal_link_ref: plain;
internal_link_title: plain;
/* bold & italic */
formatted: bold_italic | bold | italic | plain;
bold_italic: BOLD_ITALIC plain BOLD_ITALIC;
bold: BOLD plain BOLD;
italic: ITALIC plain ITALIC;
/* Plain text */
plain: (CHARACTER | SPACE)+;
/**
* LEXER RULES
* --------------------------------------------------------------------------
*/
HRLINE: '---' '-'+;
H1: '=';
H2: '==';
H3: '===';
H4: '====';
H5: '=====';
H6: '======';
BOLD_ITALIC: '\'\'\'\'\'';
BOLD: '\'\'\'';
ITALIC: '\'\'';
NL: '\r'?'\n';
CHARACTER : '!' | '"' | '#' | '$' | '%' | '&'
| '*' | '+' | ',' | '-' | '.' | '/'
| ':' | ';' | '?' | '@' | '\\' | '^' | '_' | '`' | '~'
| '0'..'9' | 'A'..'Z' |'a'..'z'
| '\u0080'..'\u7fff'
| '(' | ')'
| '\'' | '<' | '>' | '=' | '[' | ']' | '|'
;
SPACE: ' ' | '\t';
Это не ясно для меня, хотя, как можно было бы идти о выводе HTML. Я смотрел в StringTemplate, но я не понимаю, как структурировать свои шаблоны. В частности, какой шаблон идет в грамматике. Можете ли вы помочь мне на коротком примере?
Какие грамматики вы имеете в виду именно? Можете ли вы опубликовать их (или разместить ссылку на них, если они большие)? Почему вы не можете генерировать лексер и парсер? Вы получаете сообщения об ошибках? Если да, можете ли вы опубликовать их? –
Барт, я добавил некоторые подробности. – Dan
Есть ли конкретная причина, по которой вы сами создаете парсер? Почему бы не использовать [существующий парсер] (http://www.mediawiki.org/wiki/Alternative_parsers) вместо этого? –