Здравствуйте, гость ( Вход | Регистрация )
|
mannyz |
13.3.2010, 21:35
Сообщение
#1
|
|
Студент ![]() Группа: Новичок Сообщений: 18 Регистрация: 13.3.2010 Пользователь №: 1529 Спасибо сказали: 0 раз(а) Репутация: 0
|
Добрый вечер, всем
Пришлось столкнутся с ANTLR и сразу у меня с ним как-то не сложилось. Пытаюсь для начала сгенерировать простой пример (для Python) с помощью ANTLRWorks. Всего два файла, используемые для генерации. Eval.g: Цитата tree grammar Eval; options { language=Python; tokenVocab=Expr; ASTLabelType=CommonTree; } @init {self.memory = {}} // START:stat prog: stat+ ; stat: expr {print $expr.value} | ^('=' ID expr) {self.memory[$ID.getText()] = int($expr.value)} ; // END:stat // START:expr expr returns [value] : ^('+' a=expr b=expr) {$value = a+b;} | ^('-' a=expr b=expr) {$value = a-b;} | ^('*' a=expr b=expr) {$value = a*b;} | ID { k = $ID.getText() if k in self.memory: $value = self.memory[k] else: print >> sys.stderr, "undefined variable "+k } | INT {$value = int($INT.getText())} ; // END:expr и Expr.g: Цитата grammar Expr; options { language=Python; output=AST; ASTLabelType=CommonTree; } prog : ( stat {print $stat.tree.toStringTree();} )+ ; stat : expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^('=' ID expr) | NEWLINE -> ; expr : multExpr (('+'^|'-'^) multExpr)* ; multExpr : atom ('*'^ atom)* ; atom : INT | ID | '('! expr ')'! ; ID : ('a'..'z'|'A'..'Z')+ ; INT : '0'..'9'+ ; NEWLINE : '\r'? '\n' ; WS : (' '|'\t'|'\n'|'\r')+ {self.skip()} ; Со вторым файлом Expr.g возникают проблемы. Причем тест на правильность грамматики (Ctrl+R в ANTLRWorks) говорит, что все хорошо. А вот при попытке генерации появляется следующая ошибка: Цитата [18:59:55] error(10): internal error: Exception Expr__.g:14:18: unexpected char: '\'@org.antlr.grammar.v2.ANTLRLexer.nextToken(ANTLRLexer.java:347): unexpected stream error from parsing Expr__.g [18:59:55] error(150): grammar file Expr__.g has no rules [18:59:55] error(100): Expr__.g:0:0: syntax error: assign.types: <AST>:0:0: unexpected end of subtree [18:59:55] error(100): Expr__.g:0:0: syntax error: define: <AST>:0:0: unexpected end of subtree [19:12:10] Checking Grammar Expr.g... [19:18:09] error(10): internal error: Exception Expr__.g:14:18: unexpected char: '\'@org.antlr.grammar.v2.ANTLRLexer.nextToken(ANTLRLexer.java:347): unexpected stream error from parsing Expr__.g [19:18:09] error(150): grammar file Expr__.g has no rules [19:18:09] error(100): Expr__.g:0:0: syntax error: assign.types: <AST>:0:0: unexpected end of subtree [19:18:09] error(100): Expr__.g:0:0: syntax error: define: <AST>:0:0: unexpected end of subtree Поясните, пожалуйста, что к чему. Честно сказать, мне даже не понятно, откуда взялось название с двумя подчеркиваниями Expr__.g (как я понимаю, создается временный файл?). И как искать место ошибки? Потому что, если обращаться по адресу 14:18 в файле Expr.g Цитата internal error: Exception Expr__.g:14:18: unexpected char: , то ничего токового не происходит. Оно и понятно, файл другой ведь указан |
|
|
|
![]() |
|
Iron Bug |
14.3.2010, 17:19
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12
|
похоже, это у тебя его от формата файла тошнит. возможно, редактировал чем-то таким, что наоставляло "хвостов" в конце строк. либо жаба где-то неправильно настроена.
я скопировала твои файлы, сохранила их через ANTLR, они проверились и скомпилились без проблем. У меня система Linux Debian, в основном Squeeze, плюс всякие новые экспериментальные пакеты. ANTLR 1.3.1 Жаба: java version "1.6.0_17" Java SE Runtime Environment (build 1.6.0_17-b04) Java HotSpot Server VM (build 14.3-b01, mixed mode) Сообщение отредактировал Iron Bug - 14.3.2010, 17:20 |
|
|
|
mannyz ошибка при генерации в ANTLRWorks 1.3.1 13.3.2010, 21:35
mannyz Цитата(Iron Bug @ 14.3.2010, 17:19) похож... 14.3.2010, 21:12
Iron Bug у меня под линём ANTLRWorks вполне нормально работ... 15.3.2010, 17:44
mannyz а как перенаправить cin или stdin во входной поток... 16.3.2010, 17:49
Litkevich Yuriy mannyz, не цитируй большими кусками.
О том, как ци... 16.3.2010, 17:52
Iron Bug Цитата(mannyz @ 16.3.2010, 19:49) Но може... 16.3.2010, 18:44
mannyz Цитата(Iron Bug @ 16.3.2010, 18:44) Цитат... 16.3.2010, 19:04
Iron Bug дык, под Си оно не намного сложнее. просто пишется... 16.3.2010, 20:17
mannyz ага, спасибо. я так и делал.
кстати, а можно поясн... 16.3.2010, 20:49
Iron Bug насчёт с++: насколько я знаю, модуля под ANTLR для... 16.3.2010, 22:54
mannyz прикольно, ты девушка )). и тебе нравиться прогать... 17.3.2010, 0:51
mannyz а ты случайно встроенной хэш-таблицей ANTLR-овской... 17.3.2010, 2:27
Iron Bug мдя... я не юзала хэш-таблицы в ANTLR-овской реали... 17.3.2010, 22:19
mannyz Цитатамдя... я не юзала хэш-таблицы в ANTLR-овской... 17.3.2010, 23:33
mannyz кстати, в том примере для Си, который я выше приве... 18.3.2010, 13:20
Iron Bug пишут, что разве что так.
rule
{ int c = 0; }
... 18.3.2010, 23:03
mannyz ясненько. спасибо ) 19.3.2010, 8:38
mannyz IronBug, скажи, пожалуйста, можно ли в варианте дл... 23.3.2010, 13:45
Iron Bug не знаю. не задумывалась над этим. читай доки, смо... 24.3.2010, 13:37
Балалайка граждане, только 2ой день с ANTLR знаком. Не пойму... 20.12.2010, 14:10
Iron Bug точно сейчас не скажу, но примерно так:
1. в коде ... 20.12.2010, 14:39
Балалайка Ну language = C; я ставлю.
Дело в том, что с J... 20.12.2010, 17:00![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 15.12.2025, 11:00 |