10

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

但是,我找不到足够的有关词法分析器语法的文档,并且发现自己无法开始编写词法分析器。有人可以指出一个为 Pygments 编写新词法分析器的好教程吗?

我知道Pygments APIlexer development page,但老实说,对于像我这样对 Python 知识非常有限的人来说,这些还不够。

到目前为止,我的策略是寻找例子。我找到了很多,例如PuppetSassScalaAda。他们只帮了这么多。欢迎任何有关如何从我的 Stata 关键字开始的帮助。

4

2 回答 2

8

如果您只是想突出显示关键字,您可以从这个开始(用您自己的 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列表中添加一个额外的元素,一个双元素元组,其中第一个元素是正则表达式,第二个元素指定一个句法类。

于 2013-03-19T13:02:31.030 回答
4

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

我发现最有用的是Pygments 中包含的词法分析器集合

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

于 2013-03-26T03:38:03.290 回答