Я пытаюсь проанализировать следующий код, используя parsec
for x = Int in [1, 2, 3]
print x + 1
Единственная часть примера, которая может быть трудна для понимания, это x = Int
, что означает, что переменная x
определена как Int
.Синтаксически Int
здесь есть выражение.С тем же успехом его можно заменить вызовом функции, который возвращает тип.
До сих пор я был в состоянии проанализировать все простые литералы и операторы.Моя проблема сейчас в том, что на этом языке in
является ключевым словом, а также оператором, а типы (Int
) являются объектами, как и любые другие (которые могут быть списками in
).Например, следующий код совершенно корректен и печатает false
print (Int in [1, 2, 3])
Так что сейчас мой анализатор правильно анализирует for x =
, а затем анализирует Int in [1, 2, 3]
как ОДНО выражение.Как я могу заставить синтаксический анализатор for
захватить in
вместо того, чтобы оставить его анализатору expression
?У меня такое ощущение, что в parsec есть что-то подобное, но я не знаю, как его найти.
Редактировать: Я изменил пример, чтобы придать ему больше смысла ...
Редактировать: У меня возникают трудности в разных местах, язык очень сложный.Другой пример - оператор else
, который возвращает свой второй аргумент, если его первый аргумент равен нулю:
print (if true then (null else "hello") else "world")
# >> hello
print (if true then null else "hello" else "world")
# >> world