Ну, вы не можете понять это как
"Функция A1 выполняет f для объекта B, затем функция A2 выполняет g для D и т. Д."
это больше похоже на
"Функция A выполняет действие {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o или p или no-op} и сдвигает / уменьшает определенное количество объектов {1-1567} в заголовке стека типа {B, C, D, E, F или G} и содержащих его объектов до N уровней, которые могут иметь типы {H, I, J, K или L и т.д.} в определенных комбинациях согласно списку правил "
Для этого действительно нужна таблица данных (или код, сгенерированный из таблицы данных, например, как набор грамматических данных BNF), сообщающий функции, что делать.
Вы МОЖЕТЕ написать это с нуля. Вы также можете покрасить стены кисточкой для ресниц. Вы можете интерпретировать таблицу данных во время выполнения. Вы также можете поставить Sleep (1000); операторы в вашем коде каждая вторая строка. Не то чтобы я тоже пробовал.
Компиляторы сложны. Отсюда генераторы компилятора.
EDIT
Вы пытаетесь определить токены с точки зрения содержимого в самом файле.
Я предполагаю, что причина, по которой вы «не хотите использовать регулярные выражения», заключается в том, что вы хотите иметь возможность доступа к информации о номере строки для различных токенов в пределах блока текста, а не только для блока текста в целом. Если номера строк для каждого слова не нужны, и целые блоки помещаются в память, я был бы склонен смоделировать весь блок в скобках в качестве токена, поскольку это может увеличить скорость обработки. В любом случае вам понадобится пользовательская функция yylex
. Начните с создания файла с lex с фиксированными маркерами "[" и "]" для начала и конца содержимого, затем заморозьте его и измените его, чтобы получать обновленные данные о том, какие маркеры искать из кода yacc.