Найдено результатов: 2

Написание расширений Emacs на языках, отличных от Lisp

Я хотел бы взять существующее приложение (написанное в OCaml) и создать для него Emacs "interface" (например, режим Emacs GDB). Я бы предпочел сделать это без написания тонны кода Lisp. В терминах MVC я хотел бы, чтобы представление было Emacs, но для модели и контроллера оставалось (в первую очередь) OCaml.

Кто-нибудь знает способ написать расширения Emacs на языке, отличном от Lisp? Это может иметь форму привязки к расширению Emacs API на каком-либо другом языке (например, делая OCaml первоклассным языком расширения Emacs) или режим взаимодействия Emacs, где, например, расширение имеет канал, в который оно может записывать выражения Emacs Lisp и считывать результирующие значения.

emacs   lisp   ocaml    

390   6   02:15, 13th August, 2020


Разрешение конфликта reduce / reduce в yacc / ocamlyacc

Я пытаюсь разобрать grammar в ocamlyacc (почти то же самое, что и обычный yacc), который поддерживает приложение функций без операторов (например, в Ocaml или Haskell) и обычный набор двоичных и унарных операторов. Я получаю конфликт reduce/reduce с оператором' -', который может использоваться как для вычитания, так и для отрицания. Вот пример grammar, который я использую:

%token <int> INT
%token <string> ID
%token MINUS

%start expr
%type <expr> expr

%nonassoc INT ID
%left MINUS
%left APPLY

%%

expr: INT
    { ExprInt $1 }
| ID
    { ExprId $1 }
| expr MINUS expr
    { ExprSub($1, $3) }
| MINUS expr
    { ExprNeg $2 }
| expr expr %prec APPLY
    { ExprApply($1, $2) };

Проблема заключается в том, что когда вы получаете выражение типа "a - b", парсер не знает, следует ли его уменьшить как "a (-b)" (отрицание b, а затем применение) или "a - b" (вычитание). Уменьшение вычитания является правильным. Как мне разрешить конфликт в пользу этого правила?

parsing   ocaml   grammar   yacc    

401   2   16:08, 5th August, 2020