2015-04-14 3 views
1

В настоящее время мы пытаемся создать новый код с использованием antlr. У нас есть файл грамматики, который в значительной степени может распознать все. Теперь наша проблема заключается в том, что мы хотим снова создать код, используя токены, которые мы создаем для создания этого нового файла.Создать код из токенов antlr

У нас есть .txt файл с нашими лексем, выглядит следующим образом:

[@0,0:6='  ',<75>,channel=1,1:0] 
[@1,7:20='IDENTIFICATION',<6>,1:7] 
[@2,21:21=' ',<75>,channel=1,1:21] 
[@3,22:29='DIVISION',<4>,1:22] 
[@4,30:30='.',<3>,1:30] 
[@5,31:40='\n  \t ',<75>,channel=1,1:31] 
[@6,41:50='PROGRAM-ID',<16>,2:9] 
[@7,51:51='.',<3>,2:19] 
[@8,52:52=' ',<75>,channel=1,2:20] 
[@9,53:59='testpro',<76>,2:21] 
[@10,60:60='.',<3>,2:28] 
[@11,61:70='\n  \t ',<75>,channel=1,2:29] 
[@12,71:76='AUTHOR',<31>,3:9] 
[@13,77:77='.',<3>,3:15] 

Или есть другой способ, чтобы создать старый код, используя маркеры?

Заранее спасибо, Виктор

+1

Итерации над маркерами и сброс токена текста? –

+0

Одним из решений, которое мы придумали, является тщательное ознакомление с этим .txt-файлом выше и просто разделить соответствующие данные и сохранить в новый файл, который будет нашим новым кодом. Но вопрос в том, есть ли другой способ сделать это? Потому что этот способ не использует токены. –

+0

Зачем вообще использовать файл .txt? Вы можете напрямую использовать поток токенов из lexer. –

ответ

0

Самого прямой способом сделать выходную портативный лексический анализатор является сериализацией токенизированного выхода лексера для транспортировки и хранения. Вы также можете сериализовать весь синтаксический синтаксический анализ всего синтаксического анализатора. В любом случае вы будете захватывать полный текст ввода источника.

Внутренняя сложность объекта lexer stream - это один класс. Сложность объекта дерева синтаксического анализа также довольно мала, включая лишь несколько стандартных классов. Следовательно, сложность сериализации & десериализации почти полностью линейная функция размера анализируемого входного сигнала.

Google Gson - это простая в использовании, относительно быстрая библиотека сериализации объектов Java.

Если ваш синтаксический анализатор генерирует некоторое промежуточное представление проанализированного исходного ввода, вы можете напрямую транспортировать ИК-порт, используя определенную библиотеку сериализации записей, такую ​​как Google FlatBuffers, чтобы сохранить & восстановление экземпляров модели IR.

+0

У ОП есть возможность хранить токены. Хотя это могло бы обозначить «более стандартные» способы сделать это, AFAICT он уже преуспел. Он не отвечает на ключевой вопрос OP: «Как восстановить новый код (от токенов)». –

+0

Учитывая исходный вопрос и поясняющий комментарий, переносимость токенов (исходный Q) или анализируемый вывод (комментарий) является обязательным требованием, и OP ищет альтернативу использованию своего исходного представления toString токенов (которые OP распознает как проблемные и просит альтернативы). Кроме того, из комментария OP указывает, что сам код не является ключевой проблемой, но возможность воссоздать дерево разбора без повторного разбора (в процессе подготовки к регенерации) является актуальной ключевой проблемой. Ответ дается точно и адекватно для решения вопроса ОП. – GRosenberg