[Qt-creator] SyntaxHighlighting + Bison/FLex

JeremY Larrieu adrenalinedj at gmail.com
Thu Nov 23 10:06:03 CET 2017


Hello,

Thanks for your answers.

I will look to semantic highlighting.
The purpose seems to fit my needs: syntax highlighting, symbol detection,
... each time a file is opened or modified.

@Nikolai the lex file works with at most 4/5 states and was not made to
work line by line. Modifying it in this direction will not help me to stick
closer to the language when new features will come. I will have to make too
many updates to my lex file each time the one's coming with the language is
updated.

Thanks again.

Jeremy

Le 23 nov. 2017 09:19, "Nikolai Kosjar" <nikolai.kosjar at qt.io> a écrit :

> On 11/23/2017 07:29 AM, JeremY Larrieu wrote:
>
>> Hello,
>>
>> I'm working on making a plugin to support a specific language: Anubis.
>>
>> I've started the highlighting part and I saw that QtCreator is making
>> syntax highlighting line by line instead of making it "globally" for the
>> whole file.
>>
>> I just wanna know, how can I use the Bison/Flex files, used to check
>> syntax for Anubis language, to make syntax highlighting in QtCreator.
>> Knowing that most of the tokens declared in the Flex file can be
>> multiline, making a lexer, working line by line, able to detect those
>> tokens is hard and the code is too "verbose".
>>
>> I've tried to adapt what I've found in Bison/Flex files to make a syntax
>> highlighter, but it's really painful and it makes further updates harder.
>> If I was able to apply highlighting on the whole file (not line by line),
>> it were simpler and I could use it to make some other functionalities at
>> the same time: code completion, code analysis, symbol detection, ...
>>
>> Do you have an idea on how I can make syntax highlighting without
>> rewriting a full lexer ?
>>
>> Thanks in advance.
>>
>> Jeremy
>>
>
> Hi!
>
> I guess you've found TextEditor::SyntaxHighlighter, which does the line by
> line highlighting with highlightBlock(). For C++ and multi-line tokens
> (e.g. C comments) we call our custom lexer for the current line with the
> lexer state from the line before. If flex provides such a state based
> yylex() equivalent, this might work.
>
> The alternative is to use SemanticHighlighter::increment
> alApplyExtraAdditionalFormats(). With this one, you can for example start
> parsing in a worker thread and provide the highlighting information as a
> stream of TextEditor::HighlightingResult items.
>
> Nikolai
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/qt-creator/attachments/20171123/f144810d/attachment.html>


More information about the Qt-creator mailing list