Member 8816170 Ответов: 3

Как сделать генератор кода, который преобразует структурированный текст IEC 61131 в C+


Я заинтересован в создании компилятора для структурированного текста IEC 61131, предназначенного для процессора ARM. Я хочу, чтобы выходные данные генератора кода были на языке C++. Затем я планирую использовать GCC C++ для ARM. У меня уже есть код C++ для ARM, который будет действовать как среда выполнения.

Выбор программного инструмента для ПК - это C#, и я искал Antlr или Coco/R для преобразования структурированного текста в C++. После просмотра Antlr я был сбит с толку тем, как он может генерировать C++. И если я правильно понимаю Coco/R, генерация кода является частью файла .atg в производственной области.

Я новичок в концепциях синтаксического анализа. Так что любой совет будет оценен по достоинству.

Что я уже пробовал:

Я просматривал примеры проектов и грамматические файлы для Antlr и COCO/R. Я тоже пробовал устанавливать и запускать Antlr строительство 1 и 2. Но как Antlr редакторы не работают по разным причинам.
Я также заметил, что структурированный текст IEC 61131 очень похож на Pascal, и подумал, что могу использовать файлы грамматики Pascal в качестве отправной точки.

George Jonsson

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

3 Ответов

Рейтинг:
1

integragreg

Взгляните на проект Eclipse Xtext. Как только вы определили свою грамматику, вы можете довольно легко написать генератор, который будет генерировать код C++ на основе вашего AST.


Рейтинг:
0

Garth J Lancaster

Я не уверен, что (особенно 2-е предложение) в

Цитата:
Затем я планирую использовать GCC C++ для ARM. У меня уже есть код C++ для ARM, который будет действовать как среда выполнения.
значит - можете уточнить ?

Конечно, я не вижу никакой реальной проблемы с использованием Antlr или COCO/R или ? взять структурированный текст IEC 61131 и построить "дерево синтаксического анализа", а затем взять это дерево синтаксического анализа и произвести [что - то] - если бы вы не указали, что хотите работать на процессоре ARM, я изначально думал о том, чтобы

МЭК 61131 СТ --синтаксический анализ--&ГТ; П-код' ---//---&ГТ; конечный автомат с п-код переводчик'

где "Р-код" был машинно-зависимым, осмелюсь сказать, байт-кодовым представлением. Ваша версия "выглядит как"

МЭК 61131 СТ --синтаксический анализ--&ГТ; исходного кода C++ --скомпилировать для ARM с помощью GCC--&ГТ; микроконтроллер ARM двоичных

Если я правильно истолкую то, что вы говорите.

Я бы сказал, придерживайтесь Antlr или чего-то подобного, заставьте инструменты работать, постройте грамматику, возможно, начиная, как вы говорите, с грамматики типа Pascal, затем пройдите по дереву Parse/AST и создайте свой файл c++


Member 8816170

Спасибо за ответ. Сейчас у меня работает грамматика Coco/R, которая переводится на C++. Но мне не нравится направление, в котором он движется. Генератор кода для Coco/R может быть очень сложным я начал проект с Antlr4, и это кажется лучшим решением. Antlr4 избегает промежуточного AST. Я пытаюсь понять, как слушатель Antlr4 соединяется со StringTemplate. Это кажется лучшим решением.

Member 8816170

В ответ на ваш вопрос о коде C++ для ARM. Мы делаем контроллеры с процессорами ARM и программируем их с помощью Keil MDK ARM. Мы могли бы преобразовать нашу прошивку в библиотеку для C++, и компилятор GCC мог бы построить ее вместе с преобразованным кодом IEC 61131. План состоял бы в том, чтобы сделать компактный программируемый контроллер IEC 61131.

Рейтинг:
0

carl1248

Я вижу, что это Старая почта, но я подумал, что положу свои десять пенсов,,,
Получить список заявление на исправление записи. Затем вы можете пройти через нотацию, выполняя действия над логикой и/или. Как только вы получите его в этом формате, вы, надеюсь, увидите решение.
Если вы выберете полный компилятор, и вы понятия не имеете о компиляторах.....Ну что ж, удачи вам в этом ... это большая работа.
Но я не думаю, что это то, чего вы хотите, вы хотите прикрепить код к какому-то другому компилятору и позволить ему делать ВСЮ работу ... если это так, я предлагаю свое десятипенсовое решение..
Не знаю, на какой ПЛК вы тоже ссылаетесь. Вы упоминаете стандарт, но есть разные вкусы/интерпретации стандарта. Если это начало с нуля, то забудьте о ссылках на 5 языков стандарта и просто разберитесь с булевым выражением, например ((a&b)|c);...5 языков естественным образом выпадут из выражения.


OriginalGriff

Хотя я аплодирую вашему стремлению помогать людям, это хорошая идея придерживаться новых вопросов, а не 4-летних. После такого количества времени маловероятно, что оригинальный плакат вообще заинтересован в проблеме больше!
Ответы на старые вопросы можно рассматривать как охоту за репостами, которая является формой злоупотребления сайтом. Более триггерные счастливые среди нас начнут процесс запрета вас с сайта, если вы не будете осторожны. Придерживайтесь новых вопросов, и все будет хорошо.

carl1248

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

OriginalGriff

Нет проблем - я полагал, что это было что-то вроде этого, но некоторые из наших более триггерных членов не остановились бы, чтобы поговорить ... :смеяться: