【发布时间】:2017-05-19 20:30:44
【问题描述】:
我正在尝试在 JFlex 中为 Markdown 构建一个词法分析器;我正在查看 Pygments 的来源:
例如this是横线的规则:
(r'^\s*\n(?:\s*[-*_]){3,}\s*\n', Markdown.Markup)
我在我的.flex 文件中天真地写了这个:
^\s*\n(?:\s*[-*_]){3,}\s*\n { return token(TokenType.KEYWORD2); }
这只会给我错误:
Error in file "/home/hhrutz/Documents/devel/SyntaxPane/src/main/jflex/de/sciss/syntaxpane/lexers/markdown.flex" (line 294):
Syntax error.
^\s*\n(?:\s*[-*_]){3,}\s*\n { return token(TokenType.KEYWORD2); }
^
Error in file "/home/hhrutz/Documents/devel/SyntaxPane/src/main/jflex/de/sciss/syntaxpane/lexers/markdown.flex" (line 294):
Syntax error.
^\s*\n(?:\s*[-*_]){3,}\s*\n { return token(TokenType.KEYWORD2); }
^
Error in file "/home/hhrutz/Documents/devel/SyntaxPane/src/main/jflex/de/sciss/syntaxpane/lexers/markdown.flex" (line 294):
Unexpected character
^\s*\n(?:\s*[-*_]){3,}\s*\n { return token(TokenType.KEYWORD2); }
^
JFlex.GeneratorException: Generation aborted
【问题讨论】:
-
@Jan 是的,但我不知道如何解决它。你能帮我吗?例如,如果我只是删除
?:,则关于{3,}的下一个错误仍然存在。 -
例如,我可以写
^\s*\n(\s*[-*_]){3,99}\s*\n,但根据Java patterns,我应该可以写{3,}。如何指定“至少出现 3 次”?
标签: python regex pygments jflex