В настоящее время я пытаюсь написать (очень) небольшой интерпретатор/компилятор для языка программирования. Я установил синтаксис для языка, и теперь мне нужно записать грамматику для языка. Я намерен использовать парсер LL (1), потому что, после небольшого исследования, кажется, что он проще всего использовать.Написание правильных грамматик LL (1)?
Я новичок в этом домене, но из того, что я собрал, настоятельно рекомендуется формализовать синтаксис с использованием BNF или EBNF. Однако кажется, что не все грамматики подходят для реализации с использованием анализатора LL (1). Поэтому мне было интересно, какой был правильный (или рекомендуемый) подход к написанию грамматик в форме LL (1).
Благодарим за помощь, Charlie.
PS: Я намерен написать парсер, используя библиотеку Parsec от Haskell.
EDIT: Кроме того, согласно SK-логике, Parsec может обрабатывать бесконечный lookahead (LL (k)?) - но я думаю, что этот вопрос по-прежнему относится к такому типу грамматики.
Parsec способен к бесконечному взгляду. Вам не нужно ограничивать себя LL (1) по причинам, отличным от производительности. –
И это не обязательно LL (k), оно может быть контекстно-зависимым. Итак, единственное, о чем вам нужно беспокоиться, - это избежать левого рекурсии. –