مفسر (برمجة)
تنفيذ البرامج |
---|
مفاهيم عامة |
أنواع الكود |
Compilation strategies |
Notable runtimes |
|
Notable compilers & toolchains |
|
المفسّر ( الإنجليزية 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 7 especially) Doctoral dissertation tackling the problem of formalising what is an interpreter
- Short animation explaining the key conceptual difference between interpreters and compilers