Предварительная обработка с Javacc / push front некоторые символы в потоке? - PullRequest
1 голос
/ 22 декабря 2009

Используя javacc , могу ли я добавить несколько новых символов перед входным потоком?

например, допустим, что мой анализатор анализирует следующий синтаксис:

#define Paragraphs  "Paragraph+"
#define Volume "(Title,(Chapter,${Paragraphs})+)"

Book=${Volume}+;

Как я могу сказать javacc, что его сканер должен предварительно обработать ${Volume} до (Title,(Chapter,Paragraph+)+) перед вызовом синтаксического анализатора?

Можно ли это сделать с помощью оператора MORE ?

Спасибо

Ответы [ 2 ]

2 голосов
/ 23 декабря 2009

Token.image является публичным полем, поэтому вы можете просто установить его напрямую. Вот пример из главы токенизатора моей книги по JavaCC:

TOKEN : {
   {matchedToken.image = image.append("B").toString();}
}

Вы можете скачать весь исходный код книги здесь .

1 голос
/ 22 декабря 2009

ОК, думаю, я нашел решение: некоторые операторы java можно добавить в раздел TOKEN , а текущий буфер определяется в StringBuilder с именем ' image ':

| <Y:"${"(<NAME)+ "}" >
        {
        String oldValue=image.toString();
        image.setLength(0);
        image.append(my_dict.get(oldValue));
        }
...