私はANTLR 3でwikitext-to-HTMLトランスレータを完成させようとしています。ANTLRのwikitext-to-HTMLの実例3
私が検査できる実例を知っていますか?私はMediaWikiのANTLR文法やWikiのクレオール文法を試してみましたが、私は彼らがここでANTLR 3に
をレクサー&パーサを生成するために得ることができない私が使用して試した2つの文法へのリンクです:
- http://www.mediawiki.org/wiki/Markup_spec/ANTLR
- http://www.wikicreole.org/wiki/EBNFGrammarForCreole1.0
私はJavaのレクサーとパーサを生成するために、これら二つのいずれかを取得することはできません。 (私はEclipseプラグインとしてANTLR3を使用しています)。 MediaWikiは構築に時間がかかり、ある時点でOutOfMemory例外がスローされます。もう1つはデバッグ方法がわからないエラーがあります。
編集:私は非常に基本的な文法を持っているオーケー:
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';
それは1がHTMLを出力して行くだろうかしかし私にとっては明らかではありません。私はStringTemplateを調べてきましたが、テンプレートの構造を理解できません。具体的には、どのテンプレートが文法のどこに行くか。あなたは簡単な例で私を助けることができますか?
どの文法が正確に意味していますか?あなたはそれらを投稿することができますか(または、彼らが大きい場合は、それらにリンクを投稿してください)?なぜあなたはレクサー&パーサーを生成できませんか?エラーメッセージが表示されますか?もしそうなら、それらを投稿できますか? –
バート、私はいくつかの詳細を追加しました。 – Dan
パーサーを自分で生成する特別な理由はありますか?代わりに[既存のパーサ](http://www.mediawiki.org/wiki/Alternative_parsers)を使用しないでください。 –