Java 将包含两个单词的关键字添加到CDT
要拥有自定义关键字,请执行以下操作:Java 将包含两个单词的关键字添加到CDT,java,eclipse,eclipse-cdt,Java,Eclipse,Eclipse Cdt,要拥有自定义关键字,请执行以下操作: 在plugin.xml中定义一种语言,并扩展GPPLanguage类 扩展CLanguageKeywords并覆盖getKeywords以返回super.getKeywords和自定义关键字: public class MyLanguageKeywords extends CLanguageKeywords { public MyLanguageKeywords(ParserLanguage language, IScannerExtensionC
- 在
中定义一种语言,并扩展GPPLanguage类plugin.xml
- 扩展CLanguageKeywords并覆盖getKeywords以返回super.getKeywords和自定义关键字:
public class MyLanguageKeywords extends CLanguageKeywords { public MyLanguageKeywords(ParserLanguage language, IScannerExtensionConfiguration config) { super(language, config); } @Override public String[] getKeywords() { String[] cppKeywords = super.getKeywords(); String[] myKeywords = new String[] { "input", "output", "input port", "output port", }; return (String[]) ArrayUtils.addAll(cppKeywords, myKeywords); } }
- 实现getAdapter()以返回MyLanguageKeywords的实例
这适用于“输入”和“输出”,但不适用于“输入端口”或“输出端口”。如何在“输入端口”或“输出端口”组合中突出显示“端口”的关键字?我可以想到两个选项:
org.eclipse.CDT.internal.core.parser.scanner.Lexer
。(或者,您可以考虑向上添加补丁以向Listor添加这样的支持)org.eclipse.cdt.ui.semanticHighlighting
扩展点,允许插件提供自定义语义高亮显示我还应该提到,第二种方法是否有效,取决于你的新关键字如何融入语法。它们需要解析为
IASTName
,以便对它们应用语义突出显示。如果类没有声明为final,我可以从Lexer继承并重写一个方法来获得所需的行为。我认为CDT代码有太多这样的限制。分叉CDT在我的公司是不受欢迎的,所以我将尝试第二种方法。@Sadik一个补丁,从一个类中删除一个final
,它阻碍了一个插件,将被考虑。>>它们需要被解析为IASTName@Sadik如何自定义解析器?我的源解析器类继承自GnucpsSourceParser,并在我的语言类的createParser()方法中实例化。我的语言类继承自GPPLanguage。