Ошибка при запуске JSON2XML_ST

Я пытаюсь запустить JSON2XML_ST вот так:

bab@maz:~/tpantlr2-code/code/listeners$ antlr4 JSON.g4 
bab@maz:~/tpantlr2-code/code/listeners$ javac JSON2XML_ST.java 
bab@maz:~/tpantlr2-code/code/listeners$ java JSON2XML_ST t.json 

но я получил:

(json (object { (pair "description" : (value "An imaginary server config file")) ,      
(pair "logs" : (value (object { (pair "level" : (value "verbose")) , (pair "dir" :  
(value "/var/log")) }))) , (pair "host" : (value "antlr.org")) , (pair "admin" : (value 
(array [ (value "parrt") , (value "tombu") ]))) , (pair "aliases" : (value (array [ 
]))) }))
Exception in thread "main" java.lang.IllegalArgumentException: No such group file: XML.stg
at org.stringtemplate.v4.STGroupFile.<init>(STGroupFile.java:69)
at org.stringtemplate.v4.STGroupFile.<init>(STGroupFile.java:48)
at JSON2XML_ST$XMLEmitter.<init>(JSON2XML_ST.java:45)
at JSON2XML_ST.main(JSON2XML_ST.java:140)

Зачем?? Кто-нибудь может мне помочь? благодарю вас.

2 ответа

Это XML.stg, который можно использовать с JSON2XML_ST.java. Загрузка исходного кода до сих пор не содержит XML.stg. Тем не менее, это хорошее учебное упражнение, чтобы придумать этот файл самостоятельно. Это было для меня.

group XML;

empty() ::= ""

value(x) ::= "<x>"

object(fields) ::= <<

<fields; separator="\n">

>>

enclose_element(x) ::= <<
\<element><x>\</element>
>>

array(values) ::= <<

<values:enclose_element(); separator="\n">

>>

tag(name,content) ::= <<
\<<name>\><content>\</<name>\>
>>

Проблема в том, что XML.stg не является частью источника. т. е. при запуске примера файл XML.stg не существует и, следовательно, не может быть найден, поэтому возникает ошибка Нет такого группового файла.

Exception in thread "main" java.lang.IllegalArgumentException: No such group file: XML.stg

Кажется, это известная проблема, о которой сообщалось в сообщениях об ошибках ANTLR: http://pragprog.com/titles/tpantlr2/errata

50831:

Существует ссылка на источник JSON2XML_ST.java, который использует StringTemplate для перевода XML. Но в самом исходном коде есть ссылка на файл XML.stg, который отсутствует в исходном архиве книги. JSON2XML_ST.java (строка 45): шаблоны STGroup = new STGroupFile("XML.stg"); Было бы неплохо, если бы вы поместили его в архив, поскольку (ИМХО) его не очень легко найти в другом месте. Благодарю.

Здесь есть ссылка на xml.stg: http://www.antlr.org/wiki/plugins/viewsource/viewpagesrc.action?pageId=16220704 которую вы можете использовать.

Создайте новый файл, назовите его XML.stg и добавьте следующее содержимое:

group XML;

file(props) ::= <<
    \<properties>
    <props; separator="\n">
    \</properties>
>>

prop(ID,v) ::= "\<property id=\"<ID>\"><v>\</property>"

Затем повторите пример, как у вас уже есть, и это может сработать.

Другие вопросы по тегам