处理自定义语言的转义字符

时间:2011-09-07 05:20:00

标签: c# language-design

我正在为C#应用程序开发一个新功能,该功能将处理用户提供的文本。这个文本可以包含任何字符,但是大括号({})之间或括号([]之间)的所有内容都将以特殊方式处理(基本上,括号内的文本将替换为另一个文本,大括号将指示给定文本中的一个小节,将以不同的方式处理。)

所以,我想让用户选择在他的文本上使用大括号和括号,所以我首先想到的是使用“{{”来表示“{”,并且对于所有其他特殊字符都是一样的,但这会带来问题。如果他想打开一个小节,并希望小节中的第一个字符是“{”,那么他会写“{{{”,但如果他想要小节前的角色,他会写的是同样的事情。 “{”。所以这会引起歧义。

现在我想我可以使用“\”来转义括号和括号,并使用“\\”来表示“\”。我有点想弄清楚如何处理这个,但我有一种感觉,我正试图在这里重新发明轮子。不知道是否有一个已知的算法或库可以完成我想要做的事情。

3 个答案:

答案 0 :(得分:2)

为什么不使用现有的标记约定?有很多轻量级语法可供选择;根据您的用户群,其中一些可能已经熟悉MediaWiki标记和/或BBcode和/或reST和/或Markdown。

答案 1 :(得分:1)

为什么不使用XML标记而不是特殊字符?

<section>
Blah blah blah blah <replace id="some identifier" />
</section>

这种方法可以让您使用Microsoft .NET和任何其他平台中的任何XML解析器来解析文本。而且你会节省时间,因为没有什么可以逃脱的。

答案 2 :(得分:1)

我建议使用\来转义文本中的{}字符,并取消转义{}以包围子部分。这就是C#处理字符串中的字符的方式。使用双括号会引入歧义并使正确处理文本变得困难,如果不是不可能的话。您的选择也取决于您的目标用户。开发人员习惯使用转义字符,但它们可能会混淆非-dev用户。您可能希望使用<sub></sub>之类的标记来表示子节。无论哪种方式,您都可以使用正则表达式将用户的文本解析为RegEx.Matches集合。