6

我是解析器生成器的新手,我想知道 JSP/ASP/PHP 等嵌入式语言的 ANTLR 语法可能是什么样子,但不幸的是,ANTLR 站点不提供任何此类语法文件。

更准确地说,我不知道如何定义一个匹配所有内容的 AnyText 标记(包括在代码块之外没有任何意义的关键字)并且仍然能够在块内正确识别它们。

例如,以下片段应标记为:AnyText、BlockBegin、Keyword、BlockEnd、AnyText。

lorem ipsum KEYWORD dolor sit <% KEYWORD %> amet

也许还有另一个更适合我需要的解析器生成器。到目前为止,我只尝试过 ANTLR,因为它在 stackoverflow 上非常受欢迎:)

提前谢谢了!

4

2 回答 2

3

我不能代表 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) >>

您的词法分析器生成器可能具有某种模式切换功能,您必须使用它来代替它。而且您可能会发现对 HTML 内容进行词法分析比看起来更复杂(您必须担心 <SCRIPT 标记和许多其他疯狂的 HTML 内容,但这些都是我认为您可以处理的细节。

于 2009-09-28T04:20:06.943 回答
1

我遇到了这个项目http://code.google.com/p/phpparser/ 它还包含一个用于解析 PHP 的 ANTLR 语法文件:http ://code.google.com/p/phpparser/source/browse/语法/PHP.g

希望这可以帮助。

于 2011-01-24T03:33:32.333 回答