如何使用flex-bison中定义的regexp和语法为notepad ++定义语言

问题描述 投票:0回答:1

我正在为cool开发一个编译器,作为编译器课程的分配,但是我想在notepad ++中使用很酷的语言编写代码,因此我需要为notepad ++定义这种语言,我已经以flex格式编写了lexer定义,我我要开发一个很酷的解析器。无论如何,可以使用这些材料来定义记事本++的语言吗?

regex notepad++ bison flex-lexer
1个回答
1
投票
我会这样认为。 (我不使用Notepad ++,因为我不使用Windows,所以我没有验证该理论的好方法。)

据我所知,Noteoad ++基于Scintilla,Scintilla提供了一种使用Scintilla源文件doc/Lexer.txt中描述的协议来添加自定义词法分析器的机制。

基本上,要使用该协议制作由flex生成的词法分析器处理文本,您要么需要将要扫描的文本读取到临时缓冲区中,要么需要显示yylex如何读取文本(这意味着使用自定义YY_INPUT macro)。

我会选择第一个选项,因为要自定义YY_INPUT,您需要确保在函数中可以看到几个值,其中包括YY_INPUT的扩展名,但是不幸的是,flex的作者从未真正考虑到了这种需求。 (不过可以这样做。我只是避免了冗长的描述,以了解如何做。)

为了向YY_INPUT提供正确的参数,您需要跟踪当前的闪烁光标位置。为此,请将光标变量初始化为styler.ColourTo(),并在

every操作中使用startPos将其递增。 Flex使在每个操作中轻松执行某件事变得很简单:只需定义宏cursor += yyleng。 (注意:如果使用YY_USER_ACTIONYY_USER_ACTION,则需要在相应的操作中校正光标位置。)

© www.soinside.com 2019 - 2024. All rights reserved.