Разбор команд для приложения, подобного оболочке, на C

#c #parsing #parameters #command

#c #синтаксический анализ #параметры #команда

Вопрос:

Мне нужно создать приложение на языке Си, которое будет обрабатывать команды с разными параметрами для каждой команды, и некоторые из них могут быть необязательными, а порядок может измениться. Аналогично тому, что делает getopt, но не из командной строки. Также getopt нуждается в ‘-‘ для распознавания параметров, и мне не нужно вводить ‘-‘. Я должен быть похожим на оболочку приложением. У меня могла бы быть команда типа «set» и различные параметры, такие как «voltage», «frequency» или «duty», и их соответствующие значения. Например:

 set voltage 10 frequency 1500
set frequency 500
set voltage 4 duty 20
 

Должен ли я реализовывать всю логику или есть вариант getopts, который мог бы сделать все это за меня?

Комментарии:

1. Я думаю, этот вопрос слишком широк, чтобы быть здесь актуальным. Но я бы предложил изучить такие инструменты, как lex yacc. Попробуйте начать здесь, например.

2. Прочитайте строку из консоли, затем split эту строку и обработайте результаты.

3. Если ваша цель похожа на posix, возможно, что wordexp — это то , что вы ищете.

4. Или, может быть, нет 🙂 Внимательно прочитайте документы. Вот документы Gnu (с примером кода): gnu.org/software/libc/manual/html_node/Calling-Wordexp.html

5. Если вы хотите проанализировать вариант, например set voltage=10,frequency=1500 , где у вас есть key=value пары, разделенные запятыми, вы можете использовать POSIX getsubopt() для обработки строки после ключевого set слова . В противном случае вы можете написать некоторую специальную функциональность для ее обработки, или вы можете использовать Lex Yacc (или, в наши дни, Flex Bison) или аналогичный инструмент для выполнения этой работы. На самом деле, вероятно, достаточно одного Lex или Flex. Предположительно, существует какая-то другая команда, кроме той set , которую необходимо распознать и выполнить.