mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-15 16:38:54 +00:00
More notes on parle
git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@343137 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
parent
b66b0bf549
commit
a2921c38e6
4 changed files with 11 additions and 5 deletions
|
@ -8,10 +8,16 @@
|
|||
<preface xml:id="intro.parle">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
The parle extension provides lexing and parsing facilities. The implementation is based on <link xlink:href="http://www.benhanson.net/">Ben Hanson's</link> libraries and requires a <link xlink:href="http://en.cppreference.com/w/cpp/compiler_support">C++14</link> capable compiler. The lexer is based on the regex matching, the parser is LALR(1). Lexers and parsers are generated on the fly and can be used immediately after they've been finalized. Serialization and code generation are not supported by the extension, yet.
|
||||
The parle extension provides lexing and parsing facilities. The implementation is based on <link xlink:href="http://www.benhanson.net/">Ben Hanson</link>'s libraries and requires a <link xlink:href="http://en.cppreference.com/w/cpp/compiler_support">C++14</link> capable compiler. The lexer is based on the regex matching, the parser is LALR(1). Lexers and parsers are generated on the fly and can be used immediately after they've been finalized. Parle deals with parsing and lexing, maintanance of tree structures and other processing are the implementer's task. Serialization and code generation are not supported by the extension, yet.
|
||||
</para>
|
||||
<para>
|
||||
The use case for parle is, when a data format is too complex to be handled by the regex matching with PCRE. The practical application is wide - starting with things like complex CSV data, processing custom data formats and beyond. The helper methods such as <methodname>Parle\Lexer::dump</methodname> to inspect the generated state machine, or <methodname>Parle\Parser::dump</methodname> to inspect the generated grammar, are useful. The method <methodname>Parle\Parser::trace</methodname> can also be used to track the parsing operation.
|
||||
</para>
|
||||
<para>
|
||||
Lexer analysis is a process of splitting a character sequence into a list of lexemes. The lexeme list can be then used for the syntax analysis against a formal grammar. These operations are also known as lexing and parsing. This documentation doesn't provide any exhaustive information on lexing and parsing, as there are numerous resources on the net touching this topic. The approach of the underlaying libraries used in parle is in most cases compatible to Flex, Bison and other similar tools. It is also useful to use <methodname>Parle\Lexer::dump</methodname> to inspect the generated state machine, or <methodname>Parle\Parser::dump</methodname> to inspect the generated grammar. The method <methodname>Parle\Parser::trace</methodname> can be also useful to trace the parsing operation.
|
||||
Lexer analysis is a process of splitting a character sequence into a list of lexemes. The lexeme list can be then used for the syntax analysis against a formal grammar. These operations are also known as lexing and parsing. This documentation doesn't aim to provide an exhaustive information on lexing and parsing. The basics can be found on the numerous resources on the net. Several usage examples are included, to show the functionality. The extension is also useful for PHP programmers willing to learn parsing and lexing.
|
||||
</para>
|
||||
<para>
|
||||
The approach of the underlaying libraries used in parle is in most cases compatible to Flex, Bison and other similar tools. The substantial difference from the aforementioned tools is, that lexers and parsers are produced at the runtime and can be used immediately. Thanks to the underlying libraries, the underlaying work is still done by the parle extension, thus allowing for good efficiency. When the case complexity is irreducible with PCRE, parle sure comes into the game to handle sophisticated data structures. Nevertheless, in many cases there can be also a win for the cases even with the smaller complexity in terms or memory usage and maintainability.
|
||||
</para>
|
||||
</preface>
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<section xml:id="parle-lexer.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
|
||||
Base lexer class. Lexemes can be defined on the fly. If the particular lexer instance is meant to be used with <classname>Parle\Parser</classname>, the token IDs need to be taken from there. Otherwise, arbitrary token IDs can be supplied.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<section xml:id="parle-parser.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
|
||||
Parser class. Rules can be defined on the fly. Once finalized, a <classname>Parle\Lexer</classname> instance is required to deliver the token stream.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<section xml:id="parle-rlexer.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
|
||||
Recursive lexer class. Any sub states can be added on the fly to match recursive patterns. Though, sometimes it might be simpler to use an instance of <classname>Parle\Lexer</classname> and define some parser.
|
||||
</para>
|
||||
</section>
|
||||
<!-- }}} -->
|
||||
|
|
Loading…
Reference in a new issue