Возможно ли наследование в JFlex? - PullRequest
0 голосов
/ 16 февраля 2009

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

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

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

1009 * например *

import jsyntaxpane.Token;
import jsyntaxpane.TokenType;

%% 

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

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

1 Ответ

2 голосов
/ 16 февраля 2009

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

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

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

...