【问题标题】:No valid lexer class found error when testing custom Pygments lexer测试自定义 Pygments 词法分析器时未发现有效词法分析器类错误
【发布时间】:2022-12-14 05:35:41
【问题描述】:

我整理了一个应该理想地用于伪代码的词法分析器,但是当我使用python3 -m pygments -x -l ./psuedo.py:PseudoLexer test.pseudo 测试它时,我不断收到以下错误:“在 ./psuedo.py 中找不到有效的伪词法分析器类”。

我查看了我的词法分析器,几乎只是从 C++ 的注释词法分析器和 Python 的关键字词法分析器的示例中获取了很多内容,所以我不明白为什么会出现此错误。

这是代码,如果需要的话:

from pygments.lexer import RegexLexer, bygroups, words
from pygments.token import *

__all__ = ['PsuedoLexer']

class PsuedoLexer(RegexLexer):
    """
    Lexer for minted highlighting in psuedocode
    """
    name = 'Pseudo'
    aliases = ['psuedo']
    filenames = ['*.pseudo']
    
    tokens = {
        'root' : [
            # comments from cpp 
            (r'[^/]+', Text),
            (r'/\*', Comment.Multiline, 'comment'),
            (r'//.*?$', Comment.Singleline),
            (r'/', Text),
            # operators from python
            (r'!=|==|<<|>>|:=|[-~+/*%=<>&^|.]', Operator),
            (r'[]{}:(),;[]', Punctuation),
            (r'(in|is|and|or|not)\b', Operator.Word),
            # keywords from python (modified)
            (words((
                'assert', 'break', 'continue', 'del', 'elif',
                'else', 'except', 'finally', 'for', 'if', 'lambda',
                'pass', 'return', 'try', 'while', 'as', 'with',
                'end', 'repeat', 'do', 'then'), suffix=r'\b'),
             Keyword),
            (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant)
        ],
        'comment': [
            (r'[^*/]+', Comment.Multiline),
            (r'/\*', Comment.Multiline, '#push'),
            (r'\*/', Comment.Multiline, '#pop'),
            (r'[*/]', Comment.Multiline)
        ]
    }

此外,一旦我让这个词法分析器开始工作,我如何在 LaTeX 中全局/在 minted 环境中使用它?

【问题讨论】:

    标签: lexer pygments


    【解决方案1】:

    您正在使用的命令期望您的类被命名为CustomLexer

    来自documentation

    然后你可以从命令行加载和测试词法分析器 附加标志-x

    python -m pygments -x -l your_lexer_file.py &lt;inputfile&gt;

    要指定 CustomLexer 以外的类名,请在其后附加一个冒号:

    python -m pygments -x -l your_lexer.py:SomeLexer &lt;inputfile&gt;

    这意味着您应该将 PseudoLexer 类重命名为 CustomLexer 或致电 python3 -m pygments -x -l your_lexer.py:PseudoLexer test.pseudo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2012-07-09
      • 2018-11-29
      • 2021-11-10
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      相关资源
      最近更新 更多