我是解析器生成器的新手,我想知道像JSP/ASP/PHP这样的嵌入式语言的ANTLR语法怎么样,但不幸的是,ANTLR站点没有提供任何这样的语法文件.
更准确地说,我不确切地知道如何定义匹配所有内容的AnyText令牌(包括在代码块之外没有任何意义的关键字),并且仍然能够在块内正确识别它们.
例如,下面的snipped应该被标记为:AnyText,BlockBegin,Keyword,BlockEnd,AnyText.
lorem ipsum KEYWORD dolor sit <% KEYWORD %> amet
Run Code Online (Sandbox Code Playgroud)
也许还有另一个解析器生成器,它更适合我的需求.到目前为止我只尝试过ANTLR,因为它在stackoverflow上很受欢迎:)
提前谢谢了!
我不能代表 ANTLR 说话,因为我使用不同的词法分析器/解析器(DMS Software Reengineering Toolkit,我为此开发了精确的 JSP 和 PHP 词法分析器/解析器。(ASP 与您在问题中观察到的没有什么不同) )。
但基本思想是,词法分析器需要词法模式来识别您何时拾取“任何文本”以及何时处理“真实”编程语言文本。所以你需要一个起始词法模式,比如 HTML,它的工作是吸收 HTML 文本,当它遇到到 PHP 的转换时,切换模式。您还需要一个 PHP 模式,它可以获取所有 PHP 标记,并在遇到转出字符时切换回 HTML 模式。这是一个草图:
%%HTML -- mode
#token HTMLText "~[]* \< \% "
<< (GotoPHPMode) >>
%%PHP -- mode
#token KEYWORD "KEYWORD"
...
#token '%>' "\%\>"
<< (GotoHTMLMode) >>
Run Code Online (Sandbox Code Playgroud)
您的词法分析器生成器可能具有某种模式切换功能,您必须使用它来代替它。您可能会发现对 HTML 内容进行词法分析比看起来更复杂(您必须担心 <SCRIPT 标签和许多其他疯狂的 HTML 内容,但我认为您可以处理这些细节。
| 归档时间: |
|
| 查看次数: |
2817 次 |
| 最近记录: |