Есть ли в файле конфигурации чтение / запись C кода генератора?

Я знаю, как сгенерировать код сканера C с помощью flex или bison, но, к сожалению, мне нужен код C для чтения && -write- configure файла, но я не могу сгенерировать такой код с помощью flex или bison, может быть, я могу использовать файл конфигурации библиотека чтения / записи, но я думаю, что она не очень гибкая, когда мне нужен пользовательский формат файла конфигурации, так что, какие советы?

1 ответ

Решение

Я не знаю такого специального инструмента для этого, просто потому что это не такая уж тяжелая работа.

Причина, по которой у вас есть лексический и семантический анализ входных данных, заключается в том, что вы должны превратить что-то сложное (текст произвольной формы с возможностью ошибок) в нечто простое (представление в памяти без ошибок).

Переходить другим путем обычно гораздо проще, потому что вы можете просто пройтись по структурам в памяти и вывести их строковые представления. Упрощенный пример, скажем, в вашем конфигурационном файле есть строка:

define xyzzy integer size 5 is 1 3 5 7 9 ;

создать массив с именем xyzzy с пятью элементами.

При вводе вы должны токенизировать (лексический анализ) поток символов во что-то вроде:

keyword:define
name:xyzzy
keyword:integer
keyword:size
constant:5
keyword:is
constant:1
constant:3
constant:5
constant:7
constant:9
keyword:semicolon

а затем используйте семантический анализ, чтобы преобразовать его в форму, которую вы можете использовать в своей программе, например в структуру:

type = array
name = xyzzy
underlyingtype = integer
size = 5
element[1..5] = {1,3,5,7,9}

Теперь вернуть это обратно в файл конфигурации относительно просто. Вы просто просматриваете всю структуру в памяти, например:

for each in-memory-thing imt:
    if imt.type is array:
        output "define ", imt.name, " ", imt.underlyingtype
        output " size ", imt.size, " is "
        for i = 1 to imt.size inclusive:
            output imt.element[i], " "
        output " ;" with newline
    fi
    // Handle other types of imt here
rof

Таким образом, вы можете видеть, что процесс записи в файл конфигурации намного проще, чем чтение из него.

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