2013-09-03 3 views
3

У меня есть PEG grammar проблемы с лямбда-выражения, они работают, если я использую синтаксис:лямбда-выражения в PEG.js

x:{y:{x+y}}(20)(30) 

, который является эквивалентом

(function(x) { return function(y) { return x+y; }; })(20)(30); 

, но это не работает

f:{f(10)}(x:{x*x}) 

, что эквивалентно:

(function(f) { return f(10); })(function(x) { return x*x; }) 

Возможно ли, чтобы эта вторая функция работала с PEG.js?

+0

С первых строк на файл, который вы связаны, по-видимому, ответ нет ... – bfavaretto

ответ

2

После нескольких проб и ошибок на online grammar parser, я обнаружил, что это работает:

f:{f}(x:{x*x})(10) 
+0

Это потому, что создать из слева направо сначала создайте функцию идентификации, затем передайте функцию этой функции и затем выполните эту функцию. Можно ли заставить его работать справа налево, как обычная оценка, где он сначала выполняет аргументы? – jcubic

+0

Это, кажется, ограничение грамматики, которую вы используете, но я не знаю ответа. Возможно, если вы измените грамматику или создадите свой собственный. Раньше я никогда не использовал PEGjs, поэтому я больше не могу помочь вам ... – bfavaretto

Смежные вопросы