È possibile in eredità JFlex?
-
23-08-2019 - |
Domanda
Sono abbastanza nuovo per JFlex e JSyntaxPane anche se sono riuscito a incidere insieme un lexer per XPath .
Il problema mi ritrovo è che sto lavorando su un progetto che supporta un sottoinsieme di XPath con alcune caratteristiche proprietarie. Nasty Lo so.
Se questo fosse un problema regolare Java Mi piacerebbe girare di eredità, ma non sembra possibile raggiungere eredità da avere una lexer estendere un generato in precedenza uno.
es
import jsyntaxpane.Token;
import jsyntaxpane.TokenType;
%%
%public
%class ProprietaryLexer
%extends XPathLexer
%unicode
%char
%type Token
Questo sembra causare un carico di errori che mi dice che non posso estendere alcuni metodi finali. È questo un problema specifico alla DefaultJFlexLexer in JSyntaxpane o sto solo facendo male? Qualcuno è stato in una situazione simile e ha trovato un modo per ottenere una sorta di eredità ad hoc in un mazzo di lexer?
Soluzione
JFlex genera diversi metodi finali, quindi gli errori. Mi vengono in mente due possibili soluzioni:
- Basta copiare le regole da
XPathLexer
inProprietaryLexer
ed estenderli, se necessario. - (pericoloso) Modificare il file scheletro di non avere metodi finali, quindi procedere come stavi facendo. Non ho mai tentato questo, quindi non posso garantire che sarà anche compilare.
Certamente sarebbe bello se JFlex avuto un comando %inherit
, però.