簡體   English   中英

可識別縮進塊的Lexer

[英]Lexer that recognizes indented blocks

我想為一種語言編寫編譯器,該語言表示帶有空格的程序塊,例如在Python中。 我更喜歡在Python中執行此操作,但也可以選擇C ++。 是否有一個開源詞法分析器可以幫助我輕松地做到這一點,例如通過像Python詞法分析器一樣正確地生成INDENT和DEDENT標識符? 相應的解析器生成器將為加號。

LEPL是純Python,並支持越位解析。

如果您使用的是lex之類的方法,則可以這樣進行:

^[ \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的lexer / parser生成器,但是我發布的內容應該可以與lex / flex一起使用,您可以將其連接到yacc / bison來創建解析器。 您可以使用C或C ++。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM