Что выбрать fsyacc/fslex или FParsec?

Мне нужно разобрать простой язык DSL, как показано ниже:

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>;
}

Что является наиболее подходящим инструментом для разбора такого рода языка?

3 ответа

Решение

Lex/Yacc обычно лучше для законченных языков со сложной грамматикой. С Parsec работать быстрее, если у вас есть короткие полупростые задачи. Я думаю, что для вашего случая Lex/Yacc будет гораздо более подходящим.

Вы можете найти это сопоставление FParsec с инструментами генератора синтаксических анализаторов (например, fslex & fsyacc) и "рукописными" синтаксическими анализаторами рекурсивного спуска полезными для выбора между доступными альтернативами.

Что является наиболее подходящим инструментом для разбора такого рода языка?

Я бы использовал активные шаблоны.

Другие вопросы по тегам