Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
split_line [04.01.2006 16:05 (vor 19 Jahren)] – cwacha | split_line [16.11.2016 23:18 (vor 8 Jahren)] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 30: | Zeile 30: | ||
return 0; | return 0; | ||
} | } | ||
+ | </ | ||
+ | |||
+ | Output: | ||
+ | < | ||
+ | Tokens: | ||
+ | ' | ||
+ | ' | ||
+ | 'in C++' | ||
+ | ' | ||
+ | ' | ||
</ | </ | ||
=== Documentation === | === Documentation === | ||
- | A more complex example can be found in [[configparser]] in function readFile(). The function resembles a state machine with 5 states (see enum SPLIT_LINE_STATE). It is possible to provide the starting state of the machine which gives you the ability to resume tokenization of a string in some cases. In resuming mode (start_state != SL_NORMAL) the read in characters are appended to the last string in the string vector //ret// until the state switches back to SL_NORMAL. In [[configparser]] this behaviour was used to read in multiline values. However this features does not give you the ability to split a string anywhere yourself and then pass it over to split_line (using the return state as new start_state). The outcome will be different from what you might expect in most cases! | + | A more complex example can be found in [[cfg_parser]] in function readFile(). The function resembles a state machine with 5 states (see enum SPLIT_LINE_STATE). It is possible to provide the starting state of the machine which gives you the ability to resume tokenization of a string in some cases. In resuming mode (start_state != SL_NORMAL) the read in characters are appended to the last string in the string vector //ret// until the state switches back to SL_NORMAL. In [[cfg_parser]] this behaviour was used to read in multiline values. However this features does not give you the ability to split a string anywhere yourself and then pass it over to split_line (using the return state as new start_state). The outcome will be different from what you might expect in most cases! |
<code cpp> | <code cpp> | ||
Zeile 49: | Zeile 59: | ||
int split_line(std:: | int split_line(std:: | ||
</ | </ | ||
+ | |||
+ | == State Diagram == | ||
+ | |||
+ | {{ projects: | ||
+ | |||
+ | **Legend** | ||
+ | |||
+ | * character read in / action | ||
+ | * eat: append the character to the current token | ||
+ | * finish: append token to token list and start with a new token | ||
+ | |||
+ | |||
+ | === License === | ||
+ | |||
+ | < | ||
+ | |||
+ | <!-- Creative Commons License --> | ||
+ | <a href=" | ||
+ | <img alt=" | ||
+ | / | ||
+ | This software is licensed under the <a href=" | ||
+ | <!-- /Creative Commons License --> | ||
+ | |||
+ | <!-- | ||
+ | |||
+ | <rdf:RDF xmlns=" | ||
+ | xmlns: | ||
+ | xmlns: | ||
+ | <Work rdf: | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | <License rdf: | ||
+ | <permits rdf: | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | --> | ||
+ | |||
+ | </ | ||
+ | |||