首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Pygments regexp转换为JFlex

将Pygments regexp转换为JFlex
EN

Stack Overflow用户
提问于 2017-05-20 04:30:44
回答 1查看 75关注 0票数 0

我正在尝试在JFlex中构建一个用于Markdown的词法分析器;我正在查看Pygments的源代码:

例如,this是水平标尺的规则:

代码语言:javascript
复制
(r'^\s*\n(?:\s*[-*_]){3,}\s*\n', Markdown.Markup)

我天真地将这段代码写在我的.flex文件中:

代码语言:javascript
复制
^\s*\n(?:\s*[-*_]){3,}\s*\n { return token(TokenType.KEYWORD2); }

这只会给我一些错误:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-05-20 05:41:51

似乎不可能指定出现的最小次数。以下是我尝试实现"commonmark"为水平规则指定的内容:

由0-3个空格缩进组成的行,后面跟着三个或更多匹配的-_*字符序列,每个字符后面都有任意数量的空格,形成主题分隔符。

代码语言:javascript
复制
space               = " "
spacesOpt           = [ ]*

^{space}{0,3}(\-{spacesOpt}\-{spacesOpt}(\-{spacesOpt})+ | \*{spacesOpt}\*{spacesOpt}(\*{spacesOpt})+ | \_{spacesOpt}\_{spacesOpt}(\_{spacesOpt})+)\n { return ... }

有没有更好的方式来表达呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44078554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档