Я пытаюсь написать BASIC-подобный DSL с использованием Groovy, и я нахожусь на очень ранней стадии. У меня есть короткий скрипт (не обращайте внимания на пакет, я со временем его уберу):
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 @ строка 3 , столбец 7. ПЕЧАТЬ «Hello World» ^
1 ошибка
Но если я изменю оператор на PRINT ("Hello World"), он сработает...
Точно так же я могу заставить PRINT this работать (т.е. он печатает ссылку на память для этого), если я настрою код PRINT для обработки не строк. Но никаких скобок не требуется.
Почему версия без скобок не работает? И как я могу это исправить?