Corrected documentation.

This commit is contained in:
yhirose 2015-02-08 09:43:49 -05:00
parent 1e98ddeab2
commit 0dc3cd6da4

View File

@ -95,7 +95,7 @@ assert(ret == true);
assert(val == -3); assert(val == -3);
``` ```
It may be helpful to keep in mind that the action behavior is similar to the YACC semantic action model ($$ = $1, $2, ...). It may be helpful to keep in mind that the action behavior is similar to the YACC semantic action model ($$, $1, $2, ...).
In this example, the actions return values. These samentic values will be pushed up to the parent definition which can be referred to in the parent action `[](const vector<Any>& v)`. In other words, when a certain definition has been accepted, we can find all semantic values which are associated with the child definitions in `const vector<Any>& v`. The values are wrapped by peblib::Any class which is like `boost::any`. We can retrieve the value by using `get<T>` method where `T` is the actual type of the value. If no value is returned in an action, an undefined `Any` will be pushed up to the parent. Finally, the resulting value of the root definition is received in the out parameter of `parse` method in the parser. `long val` is the resulting value in this case. In this example, the actions return values. These samentic values will be pushed up to the parent definition which can be referred to in the parent action `[](const vector<Any>& v)`. In other words, when a certain definition has been accepted, we can find all semantic values which are associated with the child definitions in `const vector<Any>& v`. The values are wrapped by peblib::Any class which is like `boost::any`. We can retrieve the value by using `get<T>` method where `T` is the actual type of the value. If no value is returned in an action, an undefined `Any` will be pushed up to the parent. Finally, the resulting value of the root definition is received in the out parameter of `parse` method in the parser. `long val` is the resulting value in this case.
@ -121,9 +121,8 @@ Instead of makeing a parser by parsing PEG syntax text, we can also construct a
using namespace peglib; using namespace peglib;
using namespace std; using namespace std;
Definition ROOT, TAG, TAG_NAME, _; Definition ROOT, TAG_NAME, _;
ROOT = seq(_, zom(TAG)); ROOT = seq(_, zom(seq(chr('['), TAG_NAME, chr(']'), _)));
TAG = seq(chr('['), TAG_NAME, chr(']'), _);
TAG_NAME = oom(seq(npd(chr(']')), any())); TAG_NAME = oom(seq(npd(chr(']')), any()));
_ = zom(cls(" \t")); _ = zom(cls(" \t"));