【发布时间】:2011-05-13 05:59:16
【问题描述】:
我想为我的个人使用实现一个在线编辑器,所以我必须检查我在在线文本编辑器中编写的语句是否在形式是否正确。
我想用正则表达式检查语句的形式,我找到了一个很好的IF语句表达式here,它是
if\s*\(((?:(?:(?:"(?:(?:\\")|[^"])*")|(?:'(?:(?:\\')|[^'])*'))|[^\(\)]|\((?1)\))*+)\)\s*{((?:(?:(?:"(?:(?:\\")|[^"])*")|(?:'(?:(?:\\')|[^'])*'))|[^{}]|{(?2)})*+)}\s*(?:(?:else\s*{((?:(?:(?:"(?:(?:\\")|[^"])*")|(?:'(?:(?:\\')|[^'])*'))|[^{}]|{(?3)})*+)}\s*)|(?:else\s*if\s*\(((?:(?:(?:"(?:(?:\\")|[^"])*")|(?:'(?:(?:\\')|[^'])*'))|[^\(\)]|\((?4)\))*+)\)\s*{((?:(?:(?:"(?:(?:\\")|[^"])*")|(?:'(?:(?:\\')|[^'])*'))|[^{}]|{(?5)})*+)}\s*))*;
现在我正在寻找表达式的其余部分,例如:
- 为
- 同时
- 变量定义(如:int xxx string xxx)
- 开关盒
- 新的(对象:类,枚举)
- foreach
请don't say that it's impossible,我可以用regular expression 和IF expression 处理我的问题,我上面提到的工作得很好,其余的我需要这样的东西
提前谢谢你
【问题讨论】:
-
哇,这是一大堆字符:P
-
我不会说这是不可能的,但我会说词法解析通常使用 FSM(手动)或一些可以使用您的语法创建 AST 的第 3 方软件(如 ANTLR)完成。
-
我非常怀疑正则表达式是否 100% 准确。如果您想要获得不错的准确性,IMO 正则表达式根本不适合解决这个问题。
-
确实如此。 C# 的语法非常复杂,最好使用基于 BNF 语法的解析器生成器,例如 Gold Parser。这可以在 C# 中为您定义的任何常规语法生成解析器。我自己用它来解析 2 种语言,效果很好。
-
@Nasser Hadjloo: antlr.org/grammar/list -- 有很多语法,包括几个 c# 语法。