0

在 BASIC 中,打印语句可能如下所示:

100 PRINT "Copyright, Adrian McMenamin","maybe"

这应该在第一条语句和第二条语句之间放置一个制表符空间。

我正在为 Groovy/Java 中的 BASIC 开发 DSL/解释器,它需要解析这一行并生成如下内容:

print "Copyright, Adrian McMenamin", "    ","maybe"

(因为 Groovy 将逗号解释为仅分隔打印函数的参数。)

那么什么正则表达式可以区分不在引号内的逗号和那些在引号内的逗号(不用担心 PRINT 或行号等)?

4

2 回答 2

7

您正在查看正则表达式无法处理的解析语法。通常,您需要计算超出正则表达式范围的左括号或右括号。你可能想看看像ANTLR这样的解析器来解决这个问题。仅此任务可能有点矫枉过正,但我​​想您将不得不翻译多种类型的基本语句,然后解析器才是您真正需要的,而不是正则表达式。

于 2012-07-13T23:00:08.557 回答
0

我实现了一个非常简单的解析器,它只计算开引号(模 2)。考虑到 BASIC 字符串文字的简单规则,它就可以工作。我设计了一个非常漂亮的递归函数,它使用了一个可以正常工作的正则表达式:

100 PRINT "Copyright, 2012", "Adrian McMenamin"

但这失败了:

100 PRINT "Copyright, 2012"

哦,好吧,猜猜这只是类似 DFA 的方案的限制。

于 2012-07-14T13:45:57.703 回答