Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
4年前关闭。
Improve this question
我有Stata关键字的字典,并具有Stata语法的合理知识。我想花几个小时将其转换为Pygments的Stata词法分析器。
但是,我找不到足够的有关词法分析器语法的文档,并且发现自己无法开始对词法分析器进行编码。 有人可以指出一个很好的教程为Pygments编写新的词法分析器吗?
我知道Pygments API和lexer development page,但是老实说,对于像我这样对Python知识非常有限的人来说,这些还远远不够。
到目前为止,我的策略是寻找示例。我发现quite a few,例如Puppet,Sass,Scala,Ada。他们只是帮了大忙。欢迎从我的Stata关键字开始使用的任何帮助。
我认为您的问题不是您不了解任何Python,而是您没有编写词法分析器或了解词法分析器如何工作的经验?因为此实现非常简单。
然后,如果您想添加更多内容,请向
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
4年前关闭。
Improve this question
我有Stata关键字的字典,并具有Stata语法的合理知识。我想花几个小时将其转换为Pygments的Stata词法分析器。
但是,我找不到足够的有关词法分析器语法的文档,并且发现自己无法开始对词法分析器进行编码。 有人可以指出一个很好的教程为Pygments编写新的词法分析器吗?
我知道Pygments API和lexer development page,但是老实说,对于像我这样对Python知识非常有限的人来说,这些还远远不够。
到目前为止,我的策略是寻找示例。我发现quite a few,例如Puppet,Sass,Scala,Ada。他们只是帮了大忙。欢迎从我的Stata关键字开始使用的任何帮助。
最佳答案
如果您只想突出显示关键字,则从此开始(用您自己的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
列表中添加一个额外的元素,即两个元素的元组,其中第一个元素是正则表达式,第二个元素指定语法类。关于python - 关于如何为Pygments编写词法分析器的大量文档?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14755721/
10-12 21:04