Что выбрать 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) и "рукописными" синтаксическими анализаторами рекурсивного спуска полезными для выбора между доступными альтернативами.
Что является наиболее подходящим инструментом для разбора такого рода языка?
Я бы использовал активные шаблоны.