我有一个Stata关键字字典和对Stata语法的合理了解。我想花几个小时把它变成Pygments的Stata词法分析器。
但是,我找不到关于词法分析器语法的足够文档,并发现自己无法开始编码词法分析器。 有人能指出为Pygments编写新词法分析器的好教程吗?
我知道Pygments API和lexer development page,但老实说,对于像我这样对Python知之甚少的人来说,这些还不够。
到目前为止,我的策略是寻找例子。我找到了quite a few,例如Puppet,Sass,Scala,Ada。他们帮助的只是那么多。任何有关如何从我的Stata关键字开始的帮助都将受到欢迎。
答案 0 :(得分:7)
如果你只是想突出显示关键字,你可以从这开始(用你自己的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
列表中添加一个额外元素,这是一个双元素元组,其中第一个元素是正则表达式,第二个元素指定一个语法类。 / p>
答案 1 :(得分:4)
我最近尝试编写一个pygments lexer(对于BibTeX,它有一个简单的语法)并且同意你的评估,那里的资源对于不熟悉Python或一般代码解析概念的人来说没什么用。
我发现最有帮助的是collection of lexers included with Pygments。
有一个文件_mapping.py
列出了所有已识别的语言格式以及每个格式的词法分析器对象的链接。为了构建我的词法分析器,我试着想到与我正在处理的语言具有相似结构的语言,并检查我是否可以取出有用的东西。一些内置词法分析器比我想要的更复杂,但其他一些是有帮助的。