0
我想爲轉換爲AST的文檔定義HTML/Markdown語法。我知道,ANTLR4並不是做Markdown事情的最佳工具,但我更接近HTML方向。至少我認爲我是。 :)ANTLR4的HTML/Markdown樣式語法
這裏是我的詞法分析器定義:
lexer grammar dnpMDLexer;
NL
: [\r\n]
;
HEAD_TAG
: '#'
;
HEADING_TEXT
: ('\\#'|~[#`\r\n])+
;
ITALIC_TAG
: '*'
;
ITALIC_TEXT
: ('\\*'|~[#`*\r\n]).+?
;
LISTING_TAG
: '`'
;
RUNNING_TEXT
: ('\\#'|'\\`'|'\\*'|~[#*`])+
;
這是我的分析器定義:
parser grammar dnpMDParser;
options { tokenVocab=dnpMDLexer; }
dnpMD
: subheadline headline lead body
;
subheadline
: HEAD_TAG HEAD_TAG HEADING_TEXT HEAD_TAG HEAD_TAG NL
;
headline
: HEAD_TAG HEADING_TEXT HEAD_TAG NL
;
lead
: HEAD_TAG HEAD_TAG HEAD_TAG HEADING_TEXT HEAD_TAG HEAD_TAG HEAD_TAG
;
subheading
: HEAD_TAG HEAD_TAG HEAD_TAG HEAD_TAG HEADING_TEXT HEAD_TAG HEAD_TAG HEAD_TAG HEAD_TAG
;
listing
: LISTING_TAG LISTING_TAG LISTING_TAG LISTING_TAG .+? LISTING_TAG LISTING_TAG LISTING_TAG LISTING_TAG
;
italic
: ITALIC_TAG ITALIC_TEXT ITALIC_TAG
;
body
: RUNNING_TEXT body
| subheading body
| listing body
| italic body
| EOF
;
我想這個東西在ANTLRworks2和IntelliJ與ANTLR4插件。
我在清單和斜體規則方面存在嚴重問題。在某些情況下匹配方式很多,其他方面都沒有。在上述版本中,斜體樣式不起作用。
我正朝着正確的方向前進嗎?我試圖使用HTML語法作爲模板。不太確定ANTLR4模式是否可以幫助我區分標籤的外部文本和內部文本?
也許有人有一些有用的提示。我很感謝能夠得到的每一個提示,因爲我不能100%確定我正在處理這個問題的方式會使我走向正確的方向。
以下是ANTLRworks2中的TestRig的圖像。第二個斜體規則是相匹配的方式。
感謝, 費邊
請參閱下面的答案,瞭解一種可行的方法。 – FDeitelhoff