Что синтаксис JavaCC делает реализацию грамматики, которая может анализировать такого рода линию:Как сопоставить дополнительные теги open/close в JavaCC?
[b]content[/b]
content[/b]
[b]content
Хотя анализатору JavaCC нужно разобрать все строки, то должны различать правильные и неправильные мечении поведения.
Правильные метки похожи на 1-ю строчку, у них есть открытая и закрытая метка. Когда теги совпадают, это приведет к получению жирного форматированного текста.
Неверные метки похожи на строки 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 : ["*", "'", "$", "|", "+", "(", ")", "{", "}", "/", "%", "_", "-", "\"", "#", "<", ">", "=", "&", "\\"] >
}
* Видит BBCode * ... * [Pukes] (http://stackoverflow.com/questions/3788959/regex-to-split-bbcode-into-pieces/3792262#3792262) * – NullUserException
@NullUserException: Doesn ' я работаю для меня, мне нужно разобрать все возможные типы разметки BBCode, которые люди могут ввести. – Kdeveloper