首页 文章

关于如何为Pygments编写词法分析器的大量文档? [关闭]

提问于
浏览
8

我有一个Stata关键词典和对Stata语法的合理知识 . 我想花几个小时把它变成一个Stata词法分析器Pygments .

但是,我找不到关于词法分析器语法的足够文档,并发现自己无法开始编写词法分析器 . Could someone point out a good tutorial for writing new lexers for Pygments?

我知道Pygments APIlexer development page,但老实说,对于像我这样对Python知之甚少的人来说,这些还不够 .

到目前为止,我的策略是寻找例子 . 我找到了quite a few,例如PuppetSassScalaAda . 他们帮助的只是那么多 . 任何有关如何从我的Stata关键字开始的帮助都将受到欢迎 .

2 回答

  • 4

    如果您只是想突出显示关键字,您可以从这开始(用您自己的Stata关键字列表替换关键字):

    class StataLexer(RegexLexer):
    
        name = 'Stata'
        aliases = ['stata']
        filenames = '*.stata'
        flags = re.MULTILINE | re.DOTALL
    
        tokens = {
           'root': [
               (r'(abstract|case|catch|class|do|else|extends|false|final|'
                r'finally|for|forSome|if|implicit|import|lazy|match|new|null|'
                r'object|override|package|private|protected|requires|return|'
                r'sealed|super|this|throw|trait|try|true|type|while|with|'
                r'yield)\b', Keyword),
           ],
       }
    

    我认为你的问题并不在于你不知道任何Python,而是你在编写词法分析器或理解词法分析器的工作原理方面没有多少经验?因为这个实现相当简单 .

    然后,如果要添加更多内容,请在 root 列表中添加一个额外的元素,这是一个双元素元组,其中第一个元素是正则表达式,第二个元素指定一个语法类 .

  • 7

    我最近尝试编写pygments lexer(对于BibTeX,它有一个简单的语法),并同意你的评估,那里的资源对不熟悉Python或一般代码解析概念的人没有多大帮助 .

    我发现最有帮助的是collection of lexers included with Pygments .

    有一个文件 _mapping.py 列出了所有已识别的语言格式以及每个格式的词法分析器对象的链接 . 为了构建我的词法分析器,我试着想到与我正在处理的语言具有相似结构的语言,并检查我是否可以取出有用的东西 . 一些内置的词法分析器比我想要的更复杂,但其他的有用 .

相关问题