Pry v0.3.1 is out!

Dmitry Olshansky via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sun Jan 15 05:14:45 PST 2017


On 1/15/17 12:43 PM, Dicebot wrote:
> Sounds intriguing!
>
> On 01/15/2017 01:26 AM, Dmitry Olshansky wrote:
>> - versatility, generating some goofy parse tree is not a goal, the goal
>> is extraction of data the way the user specifies
>
> Can you show an example of what you have in mind for this?
>

Each parser has a value type that it extracts from the stream. It can be 
an AST node but doesn't have to. For instance, taking a page form the 
calculator example:

auto expr = dynamic!int;
auto primary = any(
	range!('0', '9').rep.map!(x => x.to!int),
	seq(tk!'(', expr, tk!')').map!(x => x[1])
);


Here 'expr' is a parser that produces an int that will be defined later. 
Then we see how digits are converted to string: 'range' has value of 
parsed digit, rep tells to apply it repeatedly and use the slice of 
input as the value. Finally map converts parser producing slice to 
parser producing int.

Similarly the result of 'seq' is a tuple and map takes the middle one 
('expr'), that produces an int.


I could have wasted time by creating nodes and assigning values in the 
map functions but if you just want the result of calculation it's all moot.

---
Dmitry Olshansky


More information about the Digitalmars-d-announce mailing list