#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
пары, разделенные запятыми, вы можете использовать POSIXgetsubopt()
для обработки строки после ключевогоset
слова . В противном случае вы можете написать некоторую специальную функциональность для ее обработки, или вы можете использовать Lex Yacc (или, в наши дни, Flex Bison) или аналогичный инструмент для выполнения этой работы. На самом деле, вероятно, достаточно одного Lex или Flex. Предположительно, существует какая-то другая команда, кроме тойset
, которую необходимо распознать и выполнить.