Разбор Mediawiki в ANTLR: обработка 'токенов - PullRequest
0 голосов
/ 26 марта 2011

Я пытаюсь написать грамматику для разбора Синтаксис вики Media wiki , и после этого синтаксис Creole тоже (к сожалению существующая креольская грамматика не делаетя не работаю в Antlr 3).

Моя проблема сейчас заключается в том, чтобы уловить смелое правило, когда я уже в правиле курсива, или наоборот.Например,

'' this text is bold '''now it's italic''' and just bold again''

Мне очень помог этот вопрос 1013 *, но я застрял.Цель состоит в том, чтобы создать HTML-код внутри грамматики, используя действия или, возможно, AST - я не уверен, что лучше.

1 Ответ

1 голос
/ 27 марта 2011

В качестве упражнения я также создал парсер MediaWiki и не сопоставлял теги open и close для жирного и курсивного шрифта, а скорее вызывал переключение, подобное этому:

grammar MediaWiki;

options {
  output=AST;
  backtrack=true;
  memoize=true;
}

...

// entry point of the parser
parse
  :  atom+ EOF -> ^(ROOT atom+)
  ;

atom
  :  formatToggle
  |  horizontalRule
  |  header
  |  link
  |  list
  |  preFormattedText
  |  table
  |  ...
  |  any
  ;

formatToggle
  :  SQt SQt SQt SQt SQt -> BOLD_ITALIC
  |  SQt SQt SQt         -> BOLD
  |  SQt SQt             -> ITALIC
  ;

...

SQt
  :  '\''
  ; 

И затем во времяпереводя формат MediaWiki (в HTML?), вы переворачиваете некоторые логические флаги, когда сталкиваетесь с одним из BOLD_ITALIC, BOLD или ITALIC.

Я еще не проверял свою грамматику должным образомпоэтому я не собираюсь публиковать здесь всю грамматику.

Удачи!

...