4
votes

I need to parse simple DSL language like the following:

import "library.txt"

def <int, bool, byte> main(int param1, bool param2)
{
    var a = f4(param1); // or var d = f1(f2(f3(f4(param1))));
    var b = f3(a);
    var c = f2(b);
    var d = f1(c);

    return <d, param2, b0>;
}

What is the most suitable tool to parse such kind of language?

3
If you go with FsYaac/FsLex then I highly recommend the F# Parsed Language Starter template - it avoids having to play around with the command prompt.Samuel

3 Answers

4
votes

Lex/Yacc are usually better for complete languages with complicated grammars. Parsec is faster to work with when you have short semi-simple tasks. I think that for your case, Lex/Yacc would be much more suitable.

4
votes

You might find this bullet-point comparison of FParsec with parser generator tools (e.g. fslex & fsyacc) and "hand‐written" recursive descent parsers useful for choosing between the available alternatives.

1
votes

What is the most suitable tool to parse such kind of language?

I would use active patterns.