Я пытаюсь реализовать парсер из LaTeX в HTML, чтобы завершить упражнение, мне нужно написать грамматику JavaCC, сгенерировать дерево синтаксиса Abstract и реализовать посетителя для разбора кода.
Я написал свой файл грамматики .jj, теперь я не понимаю, как использовать jjtree для генерации AST на основе файла грамматики. Кто-нибудь может мне помочь?
Вот вам мой файл грамматики, если он может помочь.
ArrayList<LaTeXObject> LaTeX() :
{
ArrayList<LaTeXObject> objects;
}
{
objects = ObjectList() <EOF>
{
return objects;
}
}
ArrayList<LaTeXObject> ObjectList() :
{
ArrayList<LaTeXObject> objects = new ArrayList<LaTeXObject>();
LaTeXObject object;
}
{
( object = Object() { objects.add(object); } )*
{
return objects;
}
}
LaTeXObject Object() :
{
LaTeXObject object;
}
{
(
object = Command()
|
object = Group()
|
object = String()
)
{
return object;
}
}
LaTeXCommand Command() :
{
String name;
}
{
<BACKSLASH>
(
name = Name() Whitespace()
|
name = SpecialCharacter()
|
name = NonSpecialCharacter()
)
{
return new LaTeXCommand(name);
}
}
String Name() :
{
StringBuilder sb = new StringBuilder();
Token token;
}
{
token = <ASCII_LETTER> { sb.append(token.image); } ( LOOKAHEAD( <ASCII_LETTER> ) token = <ASCII_LETTER> { sb.append(token.image); } )*
{
return sb.toString();
}
}
void Whitespace() :
{}
{
( LOOKAHEAD( WhitespaceCharacter() ) WhitespaceCharacter() )*
}
String WhitespaceCharacter() :
{
Token token;
}
{
token = <WHITESPACE>
{
return token.image;
}
}
String SpecialCharacter() :
{
Token token;
}
{
(
token = <BACKSLASH>
|
token = <LBRACE>
|
token = <RBRACE>
|
token = <SPECIAL>
)
{
return token.image;
}
}
String NonSpecialCharacter() :
{
Token token;
}
{
token = <NON_SPECIAL>
{
return token.image;
}
}
LaTeXGroup Group() :
{
ArrayList<LaTeXObject> objects;
}
{
<LBRACE> objects = ObjectList() <RBRACE>
{
return new LaTeXGroup(objects);
}
}
LaTeXString String() :
{
StringBuilder sb = new StringBuilder();
String string;
}
{
string = TextCharacter() { sb.append(string); } ( LOOKAHEAD( TextCharacter() ) string = TextCharacter() { sb.append(string); } )*
{
return new LaTeXString(sb.toString());
}
}
String TextCharacter() :
{
Token token;
}
{
(
token = <WHITESPACE>
|
token = <NON_SPECIAL>
|
token = <SPECIAL>
|
token = <ASCII_LETTER>
|
token = <ASCII_DIGIT>
|
token = <LATIN_SUPPLEMENT>
|
token = <UNICODE_LETTER>
)
{
return token.image;
}
}