我希望编写一个编译器,用类似Python的空格来表示程序块。我更喜欢使用Python编写,但C++也是一个选择。是否有开源的词法分析器可以帮助我轻松地完成这项工作,例如像Python词法分析器一样正确生成INDENT和DEDENT标识符?相应的解析器生成器是一个加分项。
我希望编写一个编译器,用类似Python的空格来表示程序块。我更喜欢使用Python编写,但C++也是一个选择。是否有开源的词法分析器可以帮助我轻松地完成这项工作,例如像Python词法分析器一样正确生成INDENT和DEDENT标识符?相应的解析器生成器是一个加分项。
^[ \t]+ { int new_indent = count_indent(yytext);
if (new_indent > current_indent) {
current_indent = new_indent;
return INDENT;
} else if (new_indent < current_indent) {
current_indent = new_indent;
return DEDENT;
}
/* Else do nothing, and this way
you can essentially treat INDENT and DEDENT
as opening and closing braces. */
}
你可能需要一些额外的逻辑,例如忽略空行,并在需要时自动添加DEDENT到文件末尾。
假设count_indent会考虑根据制表位值将制表符转换为空格。
我不知道Python的词法/语法分析器生成器,但我发布的内容应该可以与lex/flex一起使用,并且您可以将其连接到yacc/bison以创建解析器。您可以使用C或C++。