<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to State Hierarchy PROTOcol Language</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>Recent changes to State Hierarchy PROTOcol Language</description><atom:link href="https://sourceforge.net/p/shproto/wiki/State%20Hierarchy%20PROTOcol%20Language/feed" rel="self"/><language>en</language><lastBuildDate>Mon, 04 Nov 2019 12:26:57 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/shproto/wiki/State%20Hierarchy%20PROTOcol%20Language/feed" rel="self" type="application/rss+xml"/><item><title>State Hierarchy PROTOcol Language modified by mikerez</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v159
+++ v160
@@ -1,6 +1,6 @@
 #### Briefly ####

-The *SHProto* language describes the *State Machine* for parsing protocol or data format. This state machine is based on *State Hierarchy*. The description is used by *SHProto Compiler* to produce the code for state machine and use it to parse *Input Char Stream*. SHProto supports top-down parsing almost without looking ahead.&lt;br/&gt;
+The *SHProto* language describes a *State Machine* for parsing protocol or data format. The State Machine is based on *State Hierarchy*. A description is used by *SHProto Compiler* to produce code for State Machine and use it to parse *Input Char Stream*. SHProto supports top-down parsing almost without looking ahead.&lt;br/&gt;
 See also [FAQ].

 #### Main benefits ####
@@ -9,7 +9,6 @@
 * Easy and fast to write new protocol/data parser.
 * Easy and fast to enhance or correct existing parser.
 * Possibility to generate FSM in RAM or code-based FSM!
-* FSM processes input char by char (saves states between chars).

 #### Main conditions ####

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mikerez</dc:creator><pubDate>Mon, 04 Nov 2019 12:26:57 -0000</pubDate><guid>https://sourceforge.net4020659d852929e4480a38e89bb856b5822275ab</guid></item><item><title>State Hierarchy PROTOcol Language modified by mikerez</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v158
+++ v159
@@ -20,7 +20,7 @@

 #### Language basics ####

-* The description consists of *Tokens* divided with space symbols (" ","\\t","\\n","\\r").
+* The description consists of *Tokens* divided by space symbols (" ","\\t","\\n","\\r").
 * Each *token* is a *Node* of *state hierarchy* which is used to build result state machine.
 * The branches are described on different *Lines*.
 * Each *line* has own *Hierarchy Level* which is ruled by its indent.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mikerez</dc:creator><pubDate>Fri, 21 Sep 2018 07:33:13 -0000</pubDate><guid>https://sourceforge.net6669b51da171d12571ccd156dd7bd69d53c677e1</guid></item><item><title>State Hierarchy PROTOcol Language modified by mikerez</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v157
+++ v158
@@ -5,7 +5,7 @@

 #### Main benefits ####

-* State Machine event-driven runtime!
+* State Machine event-driven runtime.
 * Easy and fast to write new protocol/data parser.
 * Easy and fast to enhance or correct existing parser.
 * Possibility to generate FSM in RAM or code-based FSM!
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mikerez</dc:creator><pubDate>Fri, 21 Sep 2018 07:32:10 -0000</pubDate><guid>https://sourceforge.netef06e4266c64ed0a55e578257895e7785a182f52</guid></item><item><title>State Hierarchy PROTOcol Language modified by mikerez</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v156
+++ v157
@@ -1,36 +1,22 @@
 #### Briefly ####

-The *SHProto* language describes the *State Machine* for parsing protocol or data format. This state machine is based on *State Hierarchy* (aka *State Tree*) but some loops are allowed. The description is used by *SHProto Compiler* to produce the *Main Parser Function* which will realize state machine and use it to parse *Input Char Stream*. SHProto supports only top-down parsing almost without looking ahead.&lt;br/&gt;
+The *SHProto* language describes the *State Machine* for parsing protocol or data format. This state machine is based on *State Hierarchy*. The description is used by *SHProto Compiler* to produce the code for state machine and use it to parse *Input Char Stream*. SHProto supports top-down parsing almost without looking ahead.&lt;br/&gt;
 See also [FAQ].

 #### Main benefits ####

 * State Machine event-driven runtime!
-* Easy and fast to write new protocol/data parser (if you have experience).
-* Easy and fast to enhance or correct existing parser (even if you are newbie).
-* The FSM realized in RAM should be **VERY** fast!
-* FSM could process input char by char (saves states between chars).
+* Easy and fast to write new protocol/data parser.
+* Easy and fast to enhance or correct existing parser.
+* Possibility to generate FSM in RAM or code-based FSM!
+* FSM processes input char by char (saves states between chars).

 #### Main conditions ####

-* The input data flow is char (=1 byte=8 bit) based stream (*input char stream*).
-* The input stream could be limited or unlimited.
-* At any moment previous data and knowledges say how to parse next data.
-* Suppose you are waiting for some data or events to be extracted as a result.
-* Easily parses text protocols like HTTP, SMTP, POP3, IMAP, FTP, SNTP, SIP but binary capability should be done too.
-* Compiler will produce \&amp;lt;proto_name&amp;gt;.cc and \&amp;lt;proto_name&amp;gt;.h (and may be other source files) containing parser class with *state machine* building method *bool build_tree(shproto_node*)*, main parser's method *bool parse_input(char * input, unsigned len)*, *\&amp;lt;proto_name&amp;gt;_state* class, *\&amp;lt;proto_name&amp;gt;_output* class and base classes.
-
-#### Very simple example (description vs *state machine*) ####
-
-![Simple example image](https://sourceforge.net/p/shproto/wiki/Pictures/attachment/shproto-1.png)
-
-Will match any input lines like
-"Give me a pie.\\n"
-"Give me bigmac.\\n"
-"Give me an icecream.\\n"
-"Give me an icecream with chocolate.\\n"
-"Give me an icecream with chocolate and banana.\\n"
-and will call corresponding C++ function.
+* Input data flow is chars (=1 byte=8 bit) based stream (*input char stream*).
+* Input stream can be limited or unlimited.
+* Easily parses text protocols like HTTP, SMTP, POP3, IMAP, FTP, SNTP, SIP etc.
+* Compiler produces \&amp;lt;proto_name&amp;gt;.cc and \&amp;lt;proto_name&amp;gt;.h .

 #### Language basics ####

@@ -62,27 +48,27 @@

 Modificator | Description
 ------------|------------
-* | *node* could be repeated zero or many times
-+ | *node* could be repeated at least one time
+* | *node* may be repeated zero or many times
++ | *node* may be repeated at least one time
 ? | *node* will be optionally present

 #### Branching ####

 1. The branching begins from creating new *line* and increasing indent.
 +  You can describe several branches on the same indent and they all will be cheked when *state machine* will reach branching point.
-+  Any branch could have sub-branches.
++  Any branch may have sub-branches.
 +  By decreasing indent level you mean there are no more sub-branches linked to the previous branch.
 +  Being once entered the branch changes the parser's state and no state rollback will be possible (except handling by *default* token).
 +  Parser will try appropriate branches from top to bottom, depending on expected symbol or behavior of the first branch's C++ *node*. 
 +  The top branches are with zero indent and at least one such branch should present in the beginning of the file (first non empty *line*).
 +  The *line* cant have indent less than previous if such indent was not present earlier.
-+  The *external branch* could be described standalone after the main tree and empty line. This branch should start from \&amp;lt;@ALIAS&amp;gt; and should be called so.
-+  C++ code *node* will match any input symbol and will be entered if will not return *false*.
++  The *external branch* can be described standalone after the main tree and empty line. This branch should start from \&amp;lt;@ALIAS&amp;gt; and should be called so.
++  C++ code *node* matches any input symbol and will be entered if will not return *false*.
 +  Parser must use char-based indexes embedded in *nodes* to seek for appropriate node.
 +  The *default* node should get all input symbols that was passed to sub-branch before unexpected symbol was found (adding *default* will slow-down the selection).
 +  The '\\' token will logically place branches to the parent's level.

-For example lets describe fast index-based parsing of some HTTP headers:
+This example describes fast index-based parsing of some HTTP headers:

     :::bash
     'Content-' \
@@ -95,9 +81,9 @@
 &lt;br/&gt;
 #### Aliasing ####

-1. Any branching point could be aliased by adding \&amp;lt;\@alias name&amp;gt; to the end of line before branches begins.
-+  Alias could be used to declare *external branch* by adding empty *line* and \&amp;lt;\@alias name&amp;gt; after main tree or previous *external branch*. The sub-branches of *external branch* (alias) should go with increased indent.
-+  *External branch* could be called from main tree or other *external branch* and after *$$* token state machine will be returned to the place the call was done from.
+1. Any branching point may be aliased by adding \&amp;lt;\@alias name&amp;gt; to the end of line before branches begins.
++  Alias may be used to declare *external branch* by adding empty *line* and \&amp;lt;\@alias name&amp;gt; after main tree or previous *external branch*. The sub-branches of *external branch* (alias) should go with increased indent.
++  *External branch* may be called from main tree or other *external branch* and after *$$* token state machine will be returned to the place the call was done from.
 +  All other cases of calling aliases (including calling branch from itselve, calling main tree from branch) just do jumping and the calling place will not be saved.
 +  The *token* $ in *external branch* will return state machine to the main *tree* root. 

&amp;lt;/proto_name&amp;gt;&amp;lt;/proto_name&amp;gt;&amp;lt;/proto_name&amp;gt;&amp;lt;/proto_name&amp;gt;&amp;lt;/proto_name&amp;gt;&amp;lt;/proto_name&amp;gt;&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mikerez</dc:creator><pubDate>Fri, 21 Sep 2018 07:31:41 -0000</pubDate><guid>https://sourceforge.net42d06254bf971d6f0d295bc6d27c8e8c63312fb9</guid></item><item><title>State Hierarchy PROTOcol Language modified by mikerez</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v155
+++ v156
@@ -141,4 +141,4 @@
 * [BINARY1] parser example 1
 * [SQL] parser (draft!!!)

-![State Hierarchy](https://sourceforge.net/p/shproto/wiki/Pictures/attachment/137.png)
+![State Hierarchy](https://sourceforge.net/p/shproto/wiki/Pictures/attachment/tree.png)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mikerez</dc:creator><pubDate>Thu, 08 Sep 2016 12:49:45 -0000</pubDate><guid>https://sourceforge.net74f11d73e102698ab3a0e12096bc316790f65969</guid></item><item><title>State Hierarchy PROTOcol Language modified by mikerez</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v154
+++ v155
@@ -140,3 +140,5 @@
 * [MIME] parser example
 * [BINARY1] parser example 1
 * [SQL] parser (draft!!!)
+
+![State Hierarchy](https://sourceforge.net/p/shproto/wiki/Pictures/attachment/137.png)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mikerez</dc:creator><pubDate>Thu, 08 Sep 2016 12:46:28 -0000</pubDate><guid>https://sourceforge.netc622777fcd879e035aa7fd1866d6a0bd62d79cc7</guid></item><item><title>State Hierarchy PROTOcol Language modified by mikerez</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v153
+++ v154
@@ -51,7 +51,7 @@
 \[\^jhg,a-z,\\t\\x18\\\\\\\-] | alternative states *node*  (just inlines several branches in one *line*), inherits syntax from regexp, (real symbol '-' should be always back-quoted for now)
 var:type(parameters) | *Variable node* (handles any apropriate symbols for *variable* type) - will be saved in variable in parser's state; please see [SHProto variable types] 
 { printf("text"); return false; } | c++ code *node* handles any symbol and passes it through to the next *node*; returning false will stop switching to this state and parser will search for other case if exists; the following local variables are available in C++ expression: *char* chr (current *input stream* char), *shproto_state* \* state (contains ALL *variables* declared in the *tree*)
-@ALIAS | aliasing any branching point in hierarchy, always should be at the end of line, or standalone (*NOT A NODE*)
+@ALIAS | aliasing any branching point in hierarchy (*NOT A NODE*)
 &amp;lt;ALIAS&amp;gt; | call to any aliased branching point (*NOT A NODE*)
 $ | call to the hierarchy top (*NOT A NODE*)
 $$ | exit from the external branch to the place it was called from (*NOT A NODE*)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mikerez</dc:creator><pubDate>Fri, 15 May 2015 09:35:50 -0000</pubDate><guid>https://sourceforge.net21093545331f32168ee0ea5ab6834262c70c0d1b</guid></item><item><title>State Hierarchy PROTOcol Language modified by mikerez</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v152
+++ v153
@@ -51,7 +51,7 @@
 \[\^jhg,a-z,\\t\\x18\\\\\\\-] | alternative states *node*  (just inlines several branches in one *line*), inherits syntax from regexp, (real symbol '-' should be always back-quoted for now)
 var:type(parameters) | *Variable node* (handles any apropriate symbols for *variable* type) - will be saved in variable in parser's state; please see [SHProto variable types] 
 { printf("text"); return false; } | c++ code *node* handles any symbol and passes it through to the next *node*; returning false will stop switching to this state and parser will search for other case if exists; the following local variables are available in C++ expression: *char* chr (current *input stream* char), *shproto_state* \* state (contains ALL *variables* declared in the *tree*)
-&amp;lt;@ALIAS&amp;gt; | aliasing any branching point in hierarchy, always should be at the end of line, or standalone (*NOT A NODE*)
+@ALIAS | aliasing any branching point in hierarchy, always should be at the end of line, or standalone (*NOT A NODE*)
 &amp;lt;ALIAS&amp;gt; | call to any aliased branching point (*NOT A NODE*)
 $ | call to the hierarchy top (*NOT A NODE*)
 $$ | exit from the external branch to the place it was called from (*NOT A NODE*)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mikerez</dc:creator><pubDate>Fri, 15 May 2015 09:35:01 -0000</pubDate><guid>https://sourceforge.net2b768aadbaa0f5fddf8b90fa1addb226cc90749f</guid></item><item><title>State Hierarchy PROTOcol Language modified by mikerez</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v151
+++ v152
@@ -51,8 +51,8 @@
 \[\^jhg,a-z,\\t\\x18\\\\\\\-] | alternative states *node*  (just inlines several branches in one *line*), inherits syntax from regexp, (real symbol '-' should be always back-quoted for now)
 var:type(parameters) | *Variable node* (handles any apropriate symbols for *variable* type) - will be saved in variable in parser's state; please see [SHProto variable types] 
 { printf("text"); return false; } | c++ code *node* handles any symbol and passes it through to the next *node*; returning false will stop switching to this state and parser will search for other case if exists; the following local variables are available in C++ expression: *char* chr (current *input stream* char), *shproto_state* \* state (contains ALL *variables* declared in the *tree*)
-\&amp;lt;\@ALIAS&amp;gt; | aliasing any branching point in hierarchy, always should be at the end of line, or standalone (*NOT A NODE*)
-\&amp;lt;ALIAS&amp;gt; | call to any aliased branching point (*NOT A NODE*)
+&amp;lt;@ALIAS&amp;gt; | aliasing any branching point in hierarchy, always should be at the end of line, or standalone (*NOT A NODE*)
+&amp;lt;ALIAS&amp;gt; | call to any aliased branching point (*NOT A NODE*)
 $ | call to the hierarchy top (*NOT A NODE*)
 $$ | exit from the external branch to the place it was called from (*NOT A NODE*)
 \  | at the end of branch logically disarms indent of following sub-branches
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mikerez</dc:creator><pubDate>Fri, 15 May 2015 09:34:10 -0000</pubDate><guid>https://sourceforge.net8abb5bf314ecf6343e0ae09edaae200105f91f9c</guid></item><item><title>State Hierarchy PROTOcol Language modified by mikerez</title><link>https://sourceforge.net/p/shproto/wiki/State%2520Hierarchy%2520PROTOcol%2520Language/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v150
+++ v151
@@ -1,6 +1,6 @@
 #### Briefly ####

-The *SHProto* language describes the *State Machine* for parsing protocol or data format. This state machine is based on *State Hierarchy* (aka *State Tree*) but some loops are allowed. The description is used by *SHProto Compiler* to produce the *Main Parser Function* which will realize state machine and use it to parse *Input Char Stream*. SHProto supports only to-down parsing almost without looking ahead.&lt;br /&gt;
+The *SHProto* language describes the *State Machine* for parsing protocol or data format. This state machine is based on *State Hierarchy* (aka *State Tree*) but some loops are allowed. The description is used by *SHProto Compiler* to produce the *Main Parser Function* which will realize state machine and use it to parse *Input Char Stream*. SHProto supports only top-down parsing almost without looking ahead.&lt;br /&gt;
 See also [FAQ].

 #### Main benefits ####
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">mikerez</dc:creator><pubDate>Mon, 30 Mar 2015 08:24:42 -0000</pubDate><guid>https://sourceforge.netbd68a839f182337f573261d80ad17bf9ae35256b</guid></item></channel></rss>