2009-02-16 5 views
0

Я довольно новичок в JFlex и JSyntaxPane, хотя мне удалось взломать lexer for XPath.Возможно ли наследование в JFlex?

Проблема, в которой я нахожусь, заключается в том, что я работаю над проектом, который поддерживает подмножество XPath с несколькими проприетарными функциями. Я против.

Если бы это была обычная проблема Java, я бы обратился к наследованию, но не представляется возможным достичь наследования, если один lexer расширяет ранее сгенерированный.

например

import jsyntaxpane.Token; 
import jsyntaxpane.TokenType; 

%% 

%public 
%class ProprietaryLexer 
%extends XPathLexer 
%unicode 
%char 
%type Token 

Это, кажется, вызывает нагрузку ошибок говорить мне, что я не могу продлить некоторые заключительные методы. Является ли это проблемой, специфичной для DefaultJFlexLexer в JSyntaxpane, или я просто делаю это неправильно? Кто-нибудь был в подобной ситуации и нашел способ добиться своего рода специального наследования в связке лексеров?

ответ

2

JFlex генерирует несколько окончательных методов, следовательно, ошибки. Я могу думать о двух возможных путей их устранения:

  1. Просто скопировать правила из XPathLexer в ProprietaryLexer и распространить их по мере необходимости.
  2. (опасно) Измените файл скелета, чтобы он не имел окончательных методов, а затем продолжайте, как вы делали. Я никогда не пытался это сделать, поэтому я не могу гарантировать, что он даже скомпилируется.

Было бы неплохо, если бы у JFlex была команда %inherit.

+0

Я отметил это как ответ, потому что я закончил делать вариант 1. Это не идеально, но я считаю, что эти лексеры не нуждаются в большом обслуживании, поэтому это приемлемый компромисс. –

Смежные вопросы