Я хочу отримати від останньої поради з цього форуму, повторно виконавши свій проект за допомогою логіки 'state machine', якщо це можливо, щоб зменшити витрачений час роботи процесора та використання змінних.
Я починаю з машини штату Ніг Гаммона для обробки вхідного сигналу з послідовного порту , наприклад, http://www.gammon.com.au/statemachine , яка показує всі різні можливі комбінації для всіх спеціальних "подій" контрольного характеру відносно всіх можливих станів машини - по суті, 2-мірна сітка.
Я покращив свою мету до обробки послідовного вводу у форматі " команди [параметри] [параметри] ", аналогічно формату командного рядка DOS, наприклад: DIR "c : \ файли програми "/ w/s . Це звільнить мене від необхідності введення великої рядки Buffer [] і Header [] і уникає будь-якого синтаксичного аналізу
Тому мої символи управління події - це простір, кома, одна цитата, подвійна цитата, коса праворуч, Carraige Return, а мої "стани" - це NULL, COMMAND, PARAMETER, OPTIONS
Статус OPTIONS додає символи до тимчасового рядка [], доки розділ кома або пробіл або повернення Carraige призводить до того, що цю опцію буде оброблено відповідно, можливо зберегти його значення до визначеної змінної.
COMMAND і PARAMETER "додають символи до відповідних рядків команди [] та параметрів [], включаючи спеціальні контрольні символи, якщо вони містяться в одиничних або подвійних лапках (тим самим, дозволяючи цитати як частину рядка, якщо використовується в парі іншого типу).
Таким чином, існує інша державна машина, необхідна для NoQuotes, SingleQuotes та DoubleQuotes , щоб змінити роботу станів COMMAND, PARAMETER та OPTIONS.
Саме тут я вибігаю з нейронів, тому що все, що я бачу, - це неможливо складна 3-мірна сітки з 2-машинною статтею з надто великою кількістю перестановок.
Але я підозрюю, що має бути дуже практичний спосіб здійснити це, оскільки він лежить в основі практично всіх утиліт командного рядка, що належать до того часу, коли доступність процесора та доступ до пам'яті була меншою, ніж курячі зуби, а ці старі команди DOS, лінійні утиліти повинні бути якомога мімічні, як це було можливо, включаючи їх аналіз командного рядка.
Чи може хто-небудь запропонувати здійснену модель (машинний стан або інше) для отримання формату командного рядка з введення?
UPDATE
О, дорогая ... Я тільки що бачив інше ускладнення, яке я раніше не помічав, тобто варіанти "/" не обов'язково завжди в кінці, а це означає, що за винятком випадків, коли параметри змінюються за допомогою функції carraige-return, варіанти стану зміна розділювачем повинна повертатися до стану перед тим, як зміниться варіант зміни стану (п-е, я сподіваюсь, що це має сенс). У будь-якому разі, я думаю, що це знову до складу дошки, тому що цей підхід, здається, занадто складний, як вже було сказано 2 відповіді.