它不会让你开心,但你应该花时间学习编写解析器(龙书很好)。解析器任务的事情是,如果你知道如何去做,那么它们很容易,如果你不知道它们几乎是不可能的。 我会写一个标记器,它可以识别令牌,如<start_underline, "_">
和<end_underline, "_">
,用于在编辑器中使用的格式指示器和其他所有格式指示器。结果可能是这样的:
文字:Hello _world_, /how are you?/
令牌:<text, "Hello ">,<start_underline, "_">,<text, "world">,<end_underline, "_">,<text, ", ">,<start_bold, "/">,<text, "how are you?">,<end_bold, "/">,
的开始和结束,可以跟踪与布尔变量相当容易,因为它是没有意义的巢他们。这就是为什么我会在tokenizer中进行跟踪。
之后,我会编写一个解析器类,它接受这些标记并相应地将输出配置为textarea。
你看,这实际上只是应用了原理divide and conquer
。 How do I do everything I want with my text?
的任务分为3个部分:
- 根据一个有用的结构,这个字符串是什么? (Tokenizer答复)
- 如何处理特定文本部分
x
所有可能的x
? (解析器解答)
- 如何表示该字符串的解析器解释?(JTextpane或其他人的答复)
Tokenizer和Parser都不需要额外的类。因为上下文并不复杂,所以它们只能是您喜欢的Textarea类型的扩展类中的方法。
给出更详细的建议是没有帮助的我认为,下一步最好的步骤是您可能最好自己做的实现。尽管如此,请不要犹豫,询问您是否找不到某个特定部件的良好解决方案。
肖恩指出,SO使用标记。我建议你*重新使用*格式**和**执行它,因为有很多令人讨厌的角落案例可能会引入微妙和难以修复的错误。 – 2011-03-21 13:27:19