2013-11-10 2 views
0

Я совершенно новый для java_cup и синтаксического анализа, и я бы хотел сгенерировать парсер для простой грамматики, используя bnfc и javacup. я указал правила грамматики и использовать bnfc:Как использовать java_cup шаг за шагом?

bnfc -java -filename.cf 

который генерировал мне некоторые файлы (Iа filename.cup)

тогда я пытался построить его с java_cup:

java java_cup.Main filename.cup 

который также успешно завершается. Наконец, я получил файлы parser.java и sym.java.

У меня есть некоторые входные файлы, которые я бы хотел проверить, если они разобрались. Я понятия не имею, как использовать этот сгенерированный парсер. Я также составил parser.java, но когда я попытался запустить его, он бросает

Exception in thread "main" java.lang.NoClassDefFoundError: parser (wrong name: Attempt1/parser) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:788) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:447) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482 

ответ

0

Анализатор порождена bnfc не означает называться как execucable. BNFC создает тестовую программу в filename/Test.java, которую вы можете использовать.

Самый простой способ начать это спросить BNFC, чтобы сгенерировать Makefile для вас:

bnfc -java -m filename.cf 
make 

Это должно скомпилировать тестовую программу, которую затем можно проверить с:

echo "1 + 3 = 4" | java filename.Test 

(заменить 1 + 3 = 4 с чем-то, что может анализировать ваша грамматика)