尽管我设法一起破解了lexer for XPath,但我对JFlex和JSyntaxPane还是比较陌生。

我发现自己遇到的问题是,我正在开发一个项目,该项目支持具有一些专有功能的XPath的子集。讨厌,我知道。

如果这是常规的Java问题,我将转向继承,但是通过让一个词法分析器扩展先前生成的词法分析器来实现继承似乎是不可能的。

例如

import jsyntaxpane.Token;
import jsyntaxpane.TokenType;

%%

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


这似乎会导致大量错误,告诉我无法扩展某些最终方法。这是JSyntaxpane中DefaultJFlexLexer特有的问题,还是我做错了?
有没有人遇到过类似的情况,并且找到了在大量词法分析器中实现某种即席继承的方法?

最佳答案

JFlex生成了几种最终方法,因此产生了错误。我可以想到两种可能的解决方法:


只需将规则从XPathLexer复制到ProprietaryLexer并根据需要扩展它们。
(危险)将骨架文件修改为没有最终方法,然后按照您的操作进行。我从来没有尝试过,所以我不能保证它甚至可以编译。


但是,如果JFlex有%inherit命令,那肯定会很好。

10-01 12:29