标签: sablecc

解析bbcode的最佳方法

我想在php网站上使用bbcode过滤器.(我正在使用cakephp,它将是一个bbcode助手)我有一些要求.

Bbcodes可以嵌套.所以这样的事情是有效的.

[block]  
    [block]  
    [/block]  
    [block]  
        [block]  
        [/block]  
    [/block]  
[/block]  
Run Code Online (Sandbox Code Playgroud)

Bbcodes可以有0个或更多参数.

例:

[video: url="url", width="500", height="500"]Title[/video]
Run Code Online (Sandbox Code Playgroud)

Bbcodes可能有多种行为.

让我们说,[url]text[/url]将被转换为[url:url="text"]text[/url] 或视频bbcode将能够在youtube,dailymotion ....

我认为它涵盖了我的大部分需求.我总是用正则表达式做点什么.但我最大的问题是匹配参数.事实上,我得到嵌套的bbcode工作和bbcode 0参数.但是,当我为参数添加正则表达式匹配时,它与嵌套的bbcode无法正确匹配.

"\[($tag)(=.*)\"\](.*)\[\/\1\]" //它不是.*但是非gready matcher

我现在没有完整的正则表达式,但我有一些看起来像那样的东西(上图).

那么有没有办法有效地匹配bbcode与正则表达式或其他东西.我唯一能想到的是使用访问者模式并以这种方式将我的文本与每个可能的标签分开,我可以对文本解析有更多的控制权,我可以验证我的文档,所以如果输入文本没有没有有效的bbcode.在保存任何内容之前,我可以通过错误通知用户.

我会使用sablecc来创建我的文本解析器. http://sablecc.org/

有什么好主意吗?或任何可能导致高效灵活的bbcode解析器的东西?

谢谢,抱歉我的英文不好......

php cakephp sablecc bbcode

9
推荐指数
3
解决办法
1万
查看次数

测试编译器

我目前正在研究使用sablecc构建的编译器.

简而言之,编译器将把规范文件(这是我们正在解析的)和.class文件作为输入,并将检测.class文件字节码,以确保在运行.class文件时,任何规范没有被违反(这有点像jml /代码合同!但更强大的方式).

我们有几十个系统测试,涵盖了分析阶段的大部分内容(与确保规范有意义相关,并且它们也与它们应该指定的.class文件一致).

我们将它们分为两组:有效测试和无效测试.

  • 有效的测试由源代码文件组成,当我们的编译器编译时,应该不会弹出编译器错误/警告.

  • 无效测试由源代码文件组成,当我们的编译器编译时,应该弹出至少一个编译器错误/警告.

在我们处于分析阶段时,这对我们很有帮助.现在的问题是如何测试代码生成阶段.在过去,我已经完成了对我在编译器课程上开发的一个小编译器的系统测试.每个测试都包含一些该语言的源文件和一个output.txt.运行测试时,我将编译源文件,然后运行其main方法,检查输出结果是否等于output.txt.当然,所有这些都是自动化的.

现在,处理这个更大的编译器/字节码 - 仪器,事情并不那么容易.复制我用简单编译器完成的工作并不容易.我想要走的路是在这个阶段从系统测试中退缩,并专注于单元测试.


正如任何编译器开发人员所知,编译器包含大量访问者.我不太确定如何进行单元测试.从我所看到的情况来看,大多数访问者都在调用一个与该访问者相关的方法的对应类(我想这个想法是为访问者保留SRP).

我可以采用几种技术对我的编译器进行单元测试:

  1. 单独测试每个访问者的方法.这对于无堆栈访问者来说似乎是一个好主意,但对于使用一个(或多个)堆栈的访问者来说,这看起来是个糟糕的主意.然后,我将以传统方式对标准(读取,非访问者)类中的每个其他方法进行单元测试.

  2. 一次性测试整个访客.也就是说,我创建了我随后访问的树.最后,我验证符号表是否正确更新.我不关心嘲笑它的依赖关系.

  3. 与2)相同,但现在嘲笑访问者的依赖关系.

  4. 别的什么?

我仍然有问题,单元测试将与sabbleCC的AST(这真的很难看)非常紧密地结合在一起.


我们目前没有进行任何新的测试,但是我想把火车带回正轨,因为我确信没有测试系统就像喂养怪物一样,迟早会回来咬我们的.当我们最不期望的时候对接;-(

有没有人有任何编译器测试的经验,可以提供一些关于如何继续进行的一些建议?我有点迷失在这里!

java compiler-construction testing unit-testing sablecc

8
推荐指数
1
解决办法
1393
查看次数