什麼JavaCC的語法確實實現語法,可以分析這些類型的線路:如何匹配JavaCC中的可選打開/關閉標籤?
[b]content[/b]
content[/b]
[b]content
雖然JavaCC解析器需要分析所有的行,就必須區分正確和不正確標記行爲。
正確標記就像第一行一樣,它們有一個打開和關閉標記。當標籤匹配時,這將輸出一個粗體格式的文本。
不正確的標籤就像第2行和第3行,它們沒有匹配的打開或關閉標籤。當這些發生時,它們按原樣寫入輸出,不會被解釋爲標籤。
我試過下面的JavaCC代碼(LOOKAHEAD = 999999)。問題是,這種語法將總是作爲invalidTag()而不是bold()匹配所有內容。我怎樣才能確保JavaCC解析器在任何時候都可以匹配bold()?
String parse() :
{}
{
body() <EOF>
{ return buffer; }
}
void body() :
{}
{
(content())*
}
void content() :
{}
{
(text()|bold()|invalidTag)
}
void bold() :
{}
{
{ buffer += "<b>"; }
<BOLDSTART>(content())*<BOLDEND>
{ buffer += "</b>"; }
}
void invalidTag() :
{
}
{
<BOLDSTART> | <BOLDEND>
{ // todo: just output token
}
}
TOKEN :
{
<TEXT : (<LETTER>|<DIGIT>|<PUNCT>|<OTHER>)+ >
|<BOLDSTART : "[b]" >
|<BOLDEND : "[/b]" >
|<LETTER : ["a"-"z","A"-"Z"] >
|<DIGIT : ["0"-"9"] >
|<PUNCT : [".", ":", ",", ";", "\t", "!", "?", " "] >
|<OTHER : ["*", "'", "$", "|", "+", "(", ")", "{", "}", "/", "%", "_", "-", "\"", "#", "<", ">", "=", "&", "\\"] >
}
* Sees BBCode * ... * [Pukes](http://stackoverflow.com/questions/3788959/regex-to-split-bbcode-into-pieces/3792262#3792262)* – NullUserException 2010-10-07 06:15:56
@NullUserException:Doesn' t爲我工作,我需要解析所有可能的BBCode標記人員可以輸入。 – Kdeveloper 2010-10-07 12:31:29