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);
```
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.
@ -121,9 +121,8 @@ Instead of makeing a parser by parsing PEG syntax text, we can also construct a
using namespace peglib;
using namespace std;
Definition ROOT, TAG, TAG_NAME, _;
ROOT = seq(_, zom(TAG));
TAG = seq(chr('['), TAG_NAME, chr(']'), _);
Definition ROOT, TAG_NAME, _;
ROOT = seq(_, zom(seq(chr('['), TAG_NAME, chr(']'), _)));
TAG_NAME = oom(seq(npd(chr(']')), any()));
_ = zom(cls(" \t"));