在BASIC中,打印语句如下所示:
100 PRINT "Copyright, Adrian McMenamin","maybe"
哪个应该在第一个语句和第二个语句之间放置一个制表符空格。
我正在为Groovy / Java中的BASIC开发DSL /解释器,需要解析这一行并产生类似的东西:
print "Copyright, Adrian McMenamin", " ","maybe"
(因为Groovy将逗号解释为仅分离打印函数的参数。)
那么正则表达式会区分不在引号内的逗号和那些(不要担心PRINT或行号等)的逗号?
答案 0 :(得分:7)
您正在查看正常表达式无法处理的parsing和grammar。通常,您需要对开放或闭括号进行计数,这超出了正则表达式的范围。您可能希望查看解决此问题的解析器,如ANTLR。 这个任务可能只是 overkill ,但我想你必须翻译多种类型的基本语句然后解析器才是你需要的,而不是正则表达式。
答案 1 :(得分:0)
我实现了一个非常简单的解析器,只计算了开放引号(模2)。它适用于BASIC字符串文字的简单规则。 我设计了一个非常漂亮的递归函数,使用正则表达式可以正常工作:
100 PRINT "Copyright, 2012", "Adrian McMenamin"
但是这个失败了:
100 PRINT "Copyright, 2012"
哦,好吧,猜测这只是类似DFA的方案的限制。