مفسر (برمجة)
نطقب:Program execution المفسّر ( الإنجليزية Interpreter ) هوبرنامج حاسوبي يقوم بتشغيل النصوص البرمجية المكتوبة بلغة تفسيرية. حيث يقوم المفسر بتطبيقها سطرا سطرا مباشرة، وهذا بعكس المصرّف والذي يقوم بتحويل البرنامج مرة واحدة من لغة إلى أخرى (لغة الآلة غالبا) حيثقد يكون ناتجه ملف يمكن تشغيله لاحقا. بعض اللغات وخاصة اللغات الوظيفية من الصعب جدا عمل مصرف لها بينما هي عادة تعمل بسهولة عن طريق مفسر. من اللغات التي يتم تشغيل برامجها عن طريق مفسر لغة البيسك، وروبي، وبيثون وphp.
Compilers versus interpreters
Programs written in a high level language are either directly executed by some kind of interpreter or converted into machine code by a compiler (and assembler and linker) for the CPU to execute.
الكفاءة
Toy C expression interpreter |
---|
// data types for abstract syntax tree
enum _kind { kVar, kConst, kSum, kDiff, kMult, kDiv, kPlus, kMinus, kNot ;
struct _variable { int *memory; ;
struct _constant { int value; ;
struct _unaryOperation { struct _node *right; ;
struct _binaryOperation { struct _node *left, *right; ;
struct _node {
enum _kind kind;
union _expression {
struct _variable variable;
struct _constant constant;
struct _binaryOperation binary;
struct _unaryOperation unary;
e;
;
// interpreter procedure
int executeIntExpression(const struct _node *n) {
int leftValue, rightValue;
switch (n->kind) {
case kVar: return *n->e.variable.memory;
case kConst: return n->e.constant.value;
case kSum: case kDiff: case kMult: case kDiv:
leftValue = executeIntExpression(n->e.binary.left);
rightValue = executeIntExpression(n->e.binary.right);
switch (n->kind) {
case kSum: return leftValue + rightValue;
case kDiff: return leftValue - rightValue;
case kMult: return leftValue * rightValue;
case kDiv: if (rightValue == 0)
exception("division by zero"); // doesn't return
return leftValue / rightValue;
case kPlus: case kMinus: case kNot:
rightValue = executeIntExpression(n->e.unary.right);
switch (n->kind) {
case kPlus: return + rightValue;
case kMinus: return - rightValue;
case kNot: return ! rightValue;
default: exception("internal error: illegal expression kind");
|
An interpreter might well use the same lexical analyzer and parser as the compiler and then interpret the resulting abstract syntax tree. Example data type definitions for the latter, and a toy interpreter for syntax trees obtained from C expressions are shown in the box.
انظر أيضاً
- Command-line interpreter
- Compiled language
- Dynamic compilation
- Interpreted language
- Meta-circular evaluator
- Partial evaluation
- Self-interpreter
الهامش
وصلات خارجية
- IBM Card Interpreters page at Columbia University
- Theoretical Foundations For Practical 'Totally Functional Programming' (Chapterسبعة especially) Doctoral dissertation tackling the problem of formalising what is an interpreter
- Short animation explaining the key conceptual difference between interpreters and compilers