Каково точное определение Метакругового Интерпретатора?

Существует хороший список опций для GCC здесь: http://mces.blogspot.com/2008/12/year-end-cleaning-ie-on-warning-options.htm . - стена не включает все возможные предупреждения, и некоторым нужно включить explicitely.

18
задан orftz 30 May 2011 в 05:06
поделиться

3 ответа

Метациркулярный интерпретатор - это интерпретатор, написанный на (возможно, более простой) реализации того же языка. Обычно это делается для экспериментов с добавлением новых функций в язык или созданием другого диалекта.

Причина, по которой этот процесс связан с Лиспом, связана с очень ясной статьей «Искусство интерпретатора» ], который показывает несколько метациркулярных интерпретаторов, основанных на Scheme. (Этот документ является ядром книги SICP, и его четвертая глава работает через другие, которые создают, например, ленивую схему.)

Это также значительно легче сделать на "гомоиконном" языке. (язык, код которого может обрабатываться как данные во время выполнения), такой как Lisp, Prolog и Forth.

Что касается вашего прямого вопроса - компилятор C не Я вообще не переводчик. Компилятор, написанный на собственном языке, является «самообслуживанием», что является аналогичным свойством, но больше связано с начальной загрузкой. Интерпретатор PHP в PHP, вероятно, не будет считаться, поскольку вы, вероятно, повторно реализуете нетривиальное количество языка в процессе. Основное преимущество обычного метациркулярного интерпретатора заключается в том, что в этом нет необходимости - вы можете подключить существующий синтаксический анализатор, сборщик мусора (если есть) и т. Д. И просто написать оценщик верхнего уровня с разная семантика. В Scheme или Prolog это часто меньше страницы кода.

так как вы, вероятно, повторно реализуете нетривиальное количество языка в процессе. Основное преимущество обычного метациркулярного интерпретатора заключается в том, что в этом нет необходимости - вы можете подключить существующий синтаксический анализатор, сборщик мусора (если есть) и т. Д. И просто написать оценщик верхнего уровня с разная семантика. В Scheme или Prolog это часто меньше страницы кода.

так как вы, вероятно, повторно реализуете нетривиальное количество языка в процессе. Основное преимущество обычного метациркулярного интерпретатора заключается в том, что в этом нет необходимости - вы можете подключить существующий синтаксический анализатор, сборщик мусора (если есть) и т. Д. И просто написать оценщик верхнего уровня с разная семантика. В Scheme или Prolog это часто меньше страницы кода.

25
ответ дан 30 November 2019 в 07:44
поделиться

To complement the above answers: http://www.c2.com/cgi/wiki?MetaCircularEvaluator

3
ответ дан 30 November 2019 в 07:44
поделиться

Here is a definition from the wikipedia page for metacircular:

A meta-circular evaluator is a special case of a self-interpreter in which the existing facilities of the parent interpreter are directly applied to the source code being interpreted, without any need for additional implementation.

So the answer is no in both cases:

  • A C compiler is not an interpreter (evaluator). It translates a program from one form to another without executing it.
  • A (hypothetical) PHP interpreter written in PHP would be a self interpreter, but not necessarily metacircular.
6
ответ дан 30 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: