我正在尝试使用 Groovy 编写类似 BASIC 的 DSL,而且我还处于早期阶段。我有一个简短的脚本(忽略包位,我会在适当的时候重构它):
package Binsic
PRINT "Hello World"
和这个类:
package Binsic
abstract class BinsicInterpreter extends Script {
static def textArea
static def setTextArea(def window)
{
textArea = window
}
def PRINT(def param) {
textArea.append param
}
}
以这种方式调用:
def engine = new BinsicEngine()
BinsicInterpreter.setTextArea(engine.binsicWindow.screenZX)
def conf = new CompilerConfiguration()
conf.setScriptBaseClass("BinsicInterpreter")
def shell = new GroovyShell(conf)
shell.evaluate(new File("./src/Binsic/test.bas"))
(BinsicEngine 目前只是设置了 TextArea)
此代码失败...
org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败:/Users/adrian/Documents/workspace-sts-2.9.1.RELEASE/BINSIC/src/Binsic/test.bas:3:意外令牌:Hello World @ line 3 ,第 7 列。打印“Hello World”^
1 个错误
但是,如果我将语句更改为 PRINT ("Hello World") 它就可以了...
同样,如果我调整 PRINT 代码来处理非字符串,我可以让 PRINT this 工作(即它打印内存引用)。但不需要括号。
为什么不带括号的版本不起作用?我该如何解决这个问题?