Содержание

Руководство по созданию интерпретатора языка Pascal на Python

Предлагаем вашему вниманию серию статей, опубликованную в блоге Руслана Спивака. В ней автор подробно описывает процесс разработки базового интерпретатора. Серия пополняется, и в этой подборке вы найдете первые части руководства.

Примеры кода приведены на Python, однако подробные пояснения позволят читателю использовать для реализации любой другой удобный язык. В качестве интерпретируемого языка выбран Pascal, однако и здесь вы не будете ограничены — можно обратиться к любому другому языку, с семантикой которого вы хорошо знакомы.

Если вы не знаете, как работает компилятор, то вы не знаете, как работает компьютер. И если вы не уверены на 100%, что знаете, как работает компилятор, то вы не знаете, как он работает. — Стив Йиг

Небольшой ликбез перед прочтением. Компилятор — программа, которая переводит (транслирует) исходный код на языке программирования (высокого уровня) на язык, «более понятный компьютеру» (низкоуровневый). При этом программа сначала полностью транслируется, а затем выполняется. 

Интерпретатор — такой же транслятор, но выполняющий инструкции «на лету» (пооператорно, построчно), то есть без предварительной компиляции всего кода.

Различие между компилятором и интерпретатором

Почему вам нужно создать свой интерпретатор:

  1. Написать компилятор — значит задействовать и/или развить сразу несколько различных технических навыков. Причем навыков, которые окажутся полезными в программировании вообще, а не только при написании трансляторов.
  2. Вы станете чуть ближе к разгадке тайны, как же все-таки работают компьютеры. Компиляторы и интепретаторы — это магия. И нужно чувствовать себя комфортно при работе с этой магией.
  3. Вы сможете создать собственный язык программирования, восполняющий видимые вам недостатки существующих. А это, во-первых, сейчас модно, а во-вторых, при достаточном везении вы обретете мировую известность.
  4. Да ну и чем вам еще сейчас можно заняться? (Кстати, мы уже предлагали вам несколько вариантов на зимние каникулы и лето. )

Что приятно, статьи подробно иллюстрируются. Создается впечатление, что автор перед вами ведет настоящую лекцию. Вот, например, одна из синтаксических диаграмм:

В конце каждой части руководства дается несколько задач для самостоятельной реализации и список полезных книг для более полного изучения вопроса. Итак, теперь приступайте к чтению:

Часть 1. Основные понятия, разбиение на токены и сложение однозначных чисел.

Часть 2. Обработка пробельных символов, многозначные числа.

Часть 3. Синтаксические диаграммы, одиночные умножение и деление.

Часть 4. Множественные умножения и деления, форма Бэкуса-Наура.

Часть 5. Калькулятор с произвольным числом операций, ассоциативность и порядок выполнения операторов.

Часть 6. Заканчиваем калькулятор: произвольный уровень вложенности.

Часть 7. Базовые используемые структуры данных. Также рекомендуем эту серию статей.

Часть 8. Унарные операторы.

Часть 9. Объявление программы, составные операторы, присваивание, таблицы символов и обработка переменных.

Часть 10. Продолжение предыдущей части руководства. Обработка комментариев.

Серия продолжит пополняться, а пока можете обратиться к одному из пособий, которые рекомендует автор в конце каждой части.

Пишем простой интерпретатор на Haskell

Сегодня совместными усилиями мы с вами создадим простенький скриптовый язык программирования. В нем не будет массивов или условных операторов, зато будут целочисленные переменные и множество операций над ними. Писать, как вы уже поняли, будем на замечательном языке Haskell. Также мы познакомимся с «компиляторами компиляторов» Alex и Happy.

Вспоминаем теоретическую часть

Каким образом исходный код программы преобразуется в исполняемый файл? Это происходит в несколько шагов/этапов. Выходные данные, полученные на шаге N, служат входными данными для шага N+1. На вход такому «конвейеру» байт за байтом подается исходный код, а на выходе получается программа. Что же это за этапы?

Первый этап — это лексический анализ. На этом шаге код программы, скажем:

разбивается на лексемы (строки «foo», «=», «+», …), их которых затем получается последовательность токенов:

[ ИДЕНТ «foo», РАВНО, ИДЕНТ «foo», ПЛЮС, 1, ТОЧКА_С_ЗАПЯТОЙ ]

То есть, лексический анализатор разбивает программу на элементарные составные части — операторы, ключевые слова, имена переменных и тп. Также на этапе лексического анализа опционально удаляются комментарии, а запись 0b1101 преобразуется в число 13.

Выход лексического анализатора подается на вход синтаксическому анализатору (или парсеру), задача которого заключается в проверке синтаксиса (такой штуки, которая не позволяет писать десять знаков равенства подряд) и преобразовании последовательности токенов в дерево синтаксического разбора. На этом этапе мы уже не беспокоимся о том, что в коде программы есть табуляции или переносы строк. Также мы точно знаем, что программа не содержит лексическую ошибку, то есть в ней нет несуществующих операторов или переменной, имя которой начинается с цифры.

Дерево разбора представляет собой структуру наподобие следующих:

Рассмотрим левое дерево. Читая его снизу вверх, получим «взять значение переменной a и число 1, сложить их, а затем присвоить результат переменной a», что в точности описывает поведение программы. Правое дерево наглядно демонстрирует, что при его построении были учтены приоритеты операторов, то есть сначала производятся умножение и деление и только потом сложение.

Также вы можете заметить, что ни одно из деревьев не содержит токена «точка с запятой». Вообще-то, узлы дерева могут содержать не токены, а какие-то другие типы данных. Или токены, но не те, что пришли от лексического анализатора. Скажем, инкремент (оператор ++) может быть преобразован в дерево, представленное слева.

Происходящее за лексическим и синтаксическим анализом зависит от решаемой задачи, реализации компилятора, пестрости рубашек его автора и тп. За ними может следовать (или не следовать)

семантический анализ, цель которого состоит в обнаружении обращений к несуществующим переменным, вызовов функций с неверным числом аргументов и тп. Если мы пишем оптимизирующий компилятор, то за семантическим анализом последует оптимизация кода, затем — непосредственно генерация кода и, возможно, его оптимизация на уровне машинных команд.

Наш интерпретатор не будет генерировать никакого кода, работая напрямую с синтаксическим деревом. Семантика будет проверяться прямо во время интерпретации. Оптимизация производиться не будет.

Поскольку редкий компилятор (интерпретатор, транслятор, …) обходится без лексического и синтаксического анализатора, была написана масса генераторов этих самых анализаторов. «Компиляторы компиляторов» экономят время и силы, а также существенно сокращают количество багов в создаваемых с их помощью компиляторах. Мы воспользуемся генераторами Alex и Happy. Устанавливаются они, как и следовало ожидать, с помощью утилиты cabal.

Лексический анализатор

Все исходники к этой заметке вы найдете в этом архиве. Если вас интересует самая свежая версия интерпретатора, доработанная уже после публикации заметки, вы можете скачать ее из репозитория на BitBucket.

Код лексического анализатора находится в файле Lex.x. Он слишком объемен, чтобы приводить его здесь целиком, но при этом не содержит какой-то особой магии. Мы просто определяем тип данных «токен»:

data Token = TInt Int | TIdent String
             | TPlus | TMinus | TMul | TDiv | TMod
             | …

instance Show Token where
  show x = case x of
    TInt i -> show i
    TIdent s -> s
    TModifSet -> «=»
    TPlus -> «+»
    TMinus -> «-«
    TMul -> «*»
    TDiv -> «/»
    TMod -> «%»
    …

… и задаем старые добрые регулярные выражения, определяющие, какой лексеме (последовательности символов) какой токен соответствует:

$alpha = [a-zA-Z]
$digit = [0-9]
$hex = [0-9a-fA-F]
$bin = [0-1]

tokens :-
  $white+ ;
  $digit+ { \(p,_,_,s) len -> return $ TInt (read $ take len s) }

  «+»     { \(p,_,_,s) len -> return $ TPlus }
  «-»     { \(p,_,_,s) len -> return $ TMinus }
  «*»     { \(p,_,_,s) len -> return $ TMul }
  «/»     { \(p,_,_,s) len -> return $ TDiv }
  «%»     { \(p,_,_,s) len -> return $ TMod }

  . ..

На самом деле, это не сам код лексического анализатора, а что-то вроде его заготовки. А вот если выполнить команду:

… то будет сгенерирован файл Lex.hs, содержащий непосредственно код. Убедиться, что он действительно работает, можно с помощью следующей программы:

module Main where
import Lex

main = do
  s <- getContents
  putStrLn $ case alexScanTokens s of
    Right lst -> concatMap (\t -> «‘» ++ show t ++ «‘ «) lst
    Left err -> «ERROR: » ++ err

Проверяем:

$ alex Lex.x
$ ghc LexMain.hs
[1 of 2] Compiling Lex          ( Lex.hs, Lex.o )
[2 of 2] Compiling Main         ( LexMain.hs, LexMain.o )
Linking LexMain …
$ echo ‘a = a + 1; a—;’ | ./LexMain
‘a’ ‘=’ ‘a’ ‘+’ ‘1’ ‘;’ ‘a’ ‘—‘ ‘;’ ‘(EOF)’

Согласитесь, ничего сложного.

Синтаксический анализатор

Синтаксис языка программирования обычно задается с помощью контекстно-свободной грамматики, для описания которой в свою очередь используется BNF. Откроем файл Synt.y и найдем в нем описание грамматики нашего языка программирования:

Program:
  ExprList                  { Program $1 }

ExprList:
  Expr ‘;’ ExprList         { ExprList $1 $3 }
  | ‘EOF’                   { ExprEnd }

Expr:
  ident ‘=’ RVal            { Expr $1 $3 }
  …

RVal:
  RVal ‘+’ RVal             { BinOp Add $1 $3 }
  | RVal ‘-‘ RVal           { BinOp Sub $1 $3 }
  | RVal ‘*’ RVal           { BinOp Mul $1 $3 }
  | RVal ‘/’ RVal           { BinOp Div $1 $3 }
  …
  | RVal ‘?’ RVal ‘:’ RVal  { IfElse $1 $3 $5 }

  | ‘(‘ RVal ‘)’            { $2 }
  | int                     { IntVal $1 }
  | ident                   { IdentVal $1 }

Символы в кавычках, а также int и ident — это просто другие обозначения токенов:

%token
  int    { TInt $$ }
  ident  { TIdent $$ }
  ‘+’    { TPlus }
  ‘-‘    { TMinus }
  ‘*’    { TMul }
  ‘/’    { TDiv }
  ‘%’    { TMod }
  . ..

Также Synt.y содержит описание типа «синтаксическое дерево»:

data Program =   Program ExprList
                 deriving (Show, Eq)

data ExprList =  ExprList Expr ExprList | ExprEnd
                 deriving (Show, Eq)

data Expr =      Expr String RVal
                 deriving (Show, Eq)

data BinOpType = Add | Sub | Mul | Div | Mod | LogOr | LogXor
                 | LogAnd | BinAnd | BinOr | BinXor

                 | Eq | Lt | Le | Shl | Rol
                 deriving (Show, Eq)

data UnOpType =  LogNot | BinNot | Neg
                 deriving (Show, Eq)

data RVal =      IntVal Int | IdentVal String
                 | BinOp BinOpType RVal RVal | UnOp UnOpType RVal
                 | IfElse RVal RVal RVal
                 deriving (Show, Eq)

Некоторые грамматики, включая нашу, содержат неоднозначности. Это приводит к конфликтам — ситуациям, когда по заданной грамматике и заданной последовательности токенов можно построить несколько различных деревьев синтаксического разбора. Если грамматика содержит конфликты, Happy сообщит об их наличии при генерации кода синтаксического анализатора. Есть два типа конфликтов.

Наличие reduce/reduce конфликтов означает, что некой последовательности токенов может соответствовать более одного нетерминального символа. Другими словами, при некоторых условиях может оказаться неясно, то ли в программе объявляется функция, то ли происходит деление на десять. Избавиться от reduce/reduce конфликтов можно только изменив грамматику. Наша грамматика таких конфликтов не содержит.

Конфликты типа shift/reduce возникают, когда некая последовательность токенов может быть представлена только одним нетерминалом, но, тем не менее, несколькими деревьями разбора. Например, 1 + 2 * 3 — это (1 + 2) * 3 или 1 + (2 * 3)? Очевидно, наша грамматика в изобилии содержит такого рода конфликты. Разрешаются они с помощью приоритетов и ассоциативности операторов:

%right ‘=’  ‘+=’ ‘-=’ ‘*=’ ‘/=’ ‘%=’ …
%right ‘?’ ‘:’
%left ‘||’
%left ‘^^’
%left ‘&&’
%left ‘|’
%left ‘^’
%left ‘&’
%left ‘==’ ‘<>’
%left ‘<‘ ‘<=’ ‘>’ ‘>=’
%left ‘>>’ ‘<<‘ ‘<<<‘ ‘>>>’
%left ‘+’ ‘-‘
%left ‘*’ ‘/’ ‘%’
%right ‘!’ ‘~’
%right NEG
%%

Чем ниже оператор в этом списке, тем выше его приоритет. Чтобы не накосячить, я подсмотрел приоритеты и ассоциативность у Кернигана и Ритчи. Что такое NEG, будет показано немного ниже.

Теперь о shift/reduce конфликтах можно не волноваться — если операторы имеют разный приоритет, дерево синтаксического разбора будет строиться в соответствии с их приоритетами, а если одинаковый, в ход вступит ассоциативность. Например, оператор сложения является левоассоциативным, потому выражение 1 + 2 + 3 + 4 — это на самом деле ((1 + 2) + 3) + 4.

Оператор может быть безассоциативным (%nonassoc). Если два таких оператора находятся в непосредственной близости, это означает синтаксическую ошибку. Также оператор может менять свой приоритет в зависимости от контекста. Классический пример — унарный минус:

RVal:
  RVal ‘+’ RVal             { BinOp Add $1 $3 }
  | RVal ‘-‘ RVal           { BinOp Sub $1 $3 }
  | RVal ‘*’ RVal           { BinOp Mul $1 $3 }
  | RVal ‘/’ RVal           { BinOp Div $1 $3 }
  …
  | ‘-‘ RVal %prec NEG      { UnOp Neg $2 }
  . ..

Все, с матчастью покончено! Теперь попробуем синтаксический анализатор в действии:

$ happy Synt.y
$ ghc SyntMain.hs
[2 of 3] Compiling Synt         ( Synt.hs, Synt.o )
[3 of 3] Compiling Main         ( SyntMain.hs, SyntMain.o )
Linking SyntMain …
$ echo ‘a = 0xFF; b = a << 3; b |= 0b10;’ | ./SyntMain
Program (ExprList (Expr «a» (IntVal 255)) (ExprList (Expr «b»
(BinOp Shl (IdentVal «a») (IntVal 3))) (ExprList (Expr «b»
(BinOp BinOr (IdentVal «b») (IntVal 2))) ExprEnd)))

Обратите внимание на то, какое синтаксическое дерево было построено для последнего выражения. Наш синтаксический анализатор производит очень много подобный преобразований.

Интерпретатор (наконец-то!)

Исходный код интерпретатора вы найдете в файле Interpret.hs. Этот код прост и очевиден, так что оставляю его вам для самостоятельного изучения. А вот как это работает:

$ ghc InterpretMain.hs
[3 of 4] Compiling Interpret    ( Interpret. hs, Interpret.o )
[4 of 4] Compiling Main         ( InterpretMain.hs, InterpretMain.o )
Linking InterpretMain …
$ ./InterpretMain
a = 1 * 2 + 3 * 4;
  a = 14

b = 1 * (2 + 3) * 4;
  a = 14
  b = 20

c = a > b ? a / b : b / a;
  a = 14
  b = 20
  c = 1

d = 1 $ 2;
lexical error
d + + + +  
syntax error
e = a + b + c + d;
undefined variable ‘d’
a %= 0;
divide by zero

Ну разве это не прекрасно? Теперь мы можем пачками штамповать компиляторы, трансляторы и интерпретаторы, а также парсеры различных форматов, статические анализаторы кода типа lint и perlcritic, обфускаторы и деобфускаторы, программы для подсветки синтаксиса и тп. Как я уже когда-то писал, это целый новый мир!

Заключение

В качестве источника дополнительной информации настоятельно рекомендую драконью книгу. Сей труд — библия разработчика компиляторов. Вы просто обязаны прочитать его от и до, если серьезно намерены создать свой Единственный Правильный Язык Программирования.

Ваше домашнее задание, если вы примите его, заключается в доработке интерпретатора таким образом, чтобы он поддерживал строки, массивы, хеши, условные операторы, циклы и функции. Для выполнения миссии вы можете выбрать любых напарников. В случае успеха, вы должны послать мне пулл реквест с соответствующими изменениями. Вы нужны нам, мистер Хант.

Как всегда, я с нетерпением жду ваших вопросов, дополнений и прочего рода комментариев.

Метки: Haskell, Функциональное программирование, Языки программирования.

Установка Python интерпретатора | ITandLife.ru

Итак, когда Вы уже решили что будете изучать Python, Ваша первая задача – установить все необходимые инструменты. Честно говоря, я мог бы и не писать эту заметку, Вы наверняка и без меня сможете справиться с такой простой задачей, но я все же решил написать небольшую инструкцию.

Установка Python сильно отличается в зависимости от используемой платформы. Чтобы не забивать Вам голову всякими сложностями, расписал все по пунктам:

  • пользователи Windows могут скачать установочный файл с официального веб-сайта Python – python.org/download/
    Ну а дальше все как обычно – запускаете установщик и жмете на кнопки «Да» и «Далее», тут не должно возникнуть никаких проблем. Посмотрите видео (не мое):

  • у пользователей Linux и Mac OS X Python наверняка уже установлен, т.к. он входит в стандартную поставку этих ОС уже довольно давно. Да и не мне учить этих пользователей как устанавливать программы 🙂
  • некоторые пользователи Linux и Mac OS X, а также большинство пользователей Unix) могут установить Python из исходников

Для всех остальных (пользователей телефонов, планшетов, игровых консолей) – python. org/download/other/

Как я уже написал выше, всю необходимое Вы можете найти на официальном сайте – python.org. Главное – убедиться в том, что Python еще не установлен. Например, чтобы проверить установлен ли Python в Windows 7, можно открыть список папок в меню «Пуск»:

В Unix или Linux проверяйте директорию /usr

IDLE и Python command line

После установки интерпретатора Вы уже сразу можете приступить к изучению самого языка Python. Вместе с интерпретатором устанавливаются средства разработки в виде IDLE  (интегрированная среда разработки на языке Python, созданная с помощью библиотеки Tkinter) и режим командной строки.

Возможности IDLE:

  • подсветка и автозавершение кода, различные подсказки;
  • возможность выполнения кода на лету как в командной строке;
  • встроенный отладчик;
  • справочная система.

По сути дела IDLE это визуальная оболочка командной строки Python интерпретатора, несомненно в ней много недостатков, но ее вполне хватает для начинающего, а минималистичный интерфейс и подсветка кода облегчает работу и не отвлекает от программирования и изучения языка

Основные типы данных Python

Построение простого интерпретатора — CodeRoad



Я начинаю проект, в котором мне нужно реализовать легкий интерпретатор. Интерпретатор используется для выполнения простых научных алгоритмов. Язык программирования, который будет использовать этот интерпретатор, должен быть простым, поскольку он ориентирован на разработчиков, не являющихся программистами (например, математиков.)

Интерпретатор должен поддерживать основные функции языков программирования:

  • Вещественные числа, переменные, многомерные массивы
  • Двоичный код (+, -, *, /, %) и логическое (==, !=, <, >, <=, >=) операции
  • Циклы (for, while), условные выражения (if)
  • Функции

MathWorks MatLab -хороший пример того, куда я направляюсь, просто гораздо проще. Интерпретатор будет использоваться в качестве среды для демонстрации алгоритмов; простых алгоритмов, таких как нахождение среднего значения dataset/array, или немного более сложных алгоритмов, таких как исключение Гаусса или RSA .

Лучший / самый практичный ресурс, который я нашел по этому вопросу, — это запись Рона Аюба о проекте кода ( разбор алгебраических выражений с использованием шаблона интерпретатора) — идеальный пример уменьшенной версии моей проблемы.

Книга о пурпурном драконе кажется мне слишком большой, что-нибудь более практичное?

Интерпретатор будет реализован как библиотека .NET, использующая C#. однако ресурсы для любой платформы приветствуются, так как часть дизайна-архитектуры этой проблемы является самой сложной.

Какие-нибудь практические ресурсы?

(пожалуйста, избегайте ответов “this is not trivial” или “why re-invent the wheel”)

c# architecture compiler-construction programming-languages
Поделиться Источник ANaimi     02 ноября 2008 в 07:38

9 ответов


  • Построение интерпретатора Python на Windows с поддержкой UCS4

    Как я могу настроить проект сборки интерпретатора Python для сборки с поддержкой UCS4 на Windows? Например, я хочу создать Python 2.6.9, 64 бита + поддержку UCS4 для Windows. Мы хотим создать предварительно скомпилированные файлы python (файлы. pyc) для нескольких платформ. Из-за нашей…

  • boost.python экземпляр интерпретатора

    Мне нужно использовать boost::python , но я хочу, чтобы контекст интерпретатора был уничтожен после завершения взаимодействия python. Как и когда именно создается экземпляр интерпретатора python и как мне уничтожить все выделенные им ресурсы? Обновление , по-видимому, Py_Finalize не предназначено…



10

Я бы написал его в ANTLR . Напишите grammar, пусть ANTLR сгенерирует парсер C#. Вы можете ANTLR запросить дерево синтаксического анализа, и, возможно, интерпретатор уже может работать с деревом синтаксического анализа. Возможно, вам придется преобразовать дерево синтаксического анализа в какое-то более абстрактное внутреннее представление (хотя ANTLR уже позволяет исключить неуместную пунктуацию при создании дерева).

Поделиться Martin v. Löwis     02 ноября 2008 в 07:47



2

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

Конечно, если то, что вы действительно хотите, — это удовольствие от создания своего собственного, тогда другой совет разумен.

Поделиться Norman Ramsey     12 декабря 2008 в 06:39



2

Это может показаться странным, но мастерство написания сценариев игр-отличный ресурс для изучения синтаксического анализа, компиляции и интерпретации кода.

Вы действительно должны проверить это:

http:/ / www. amazon.com / Scripting-Mastery-Premier-Press-Development/dp/1931841578

Поделиться Unknown     02 ноября 2008 в 07:50




2

Один из способов сделать это-изучить исходный код существующего интерпретатора. Я написал интерпретатор javascript на языке программирования D, вы можете скачать исходный код с http:/ / ftp.digitalmars.com/dmdscript. zip

Уолтер Брайт, Цифровой Марс

Поделиться Walter Bright     04 ноября 2008 в 06:24


Поделиться FlySwat     04 ноября 2008 в 06:31



1

Вы рассматривали возможность использования IronPython ? Он прост в использовании с .NET и, кажется, отвечает всем вашим требованиям. Я понимаю, что python довольно популярен для научного программирования, так что вполне возможно, что ваши пользователи уже будут знакомы с ним.

Поделиться Daniel Plaisted     04 ноября 2008 в 06:38



0

Язык программирования, который будет использовать этот интерпретатор, должен быть простым, поскольку он ориентирован на разработчиков, не являющихся разработчиками программного обеспечения.

Я собираюсь вмешаться в эту часть вашего вопроса. Простой язык-это не то, что вы действительно хотите передать разработчикам, не являющимся разработчиками программного обеспечения. Урезанные языки требуют от программиста больших усилий. То, что вам действительно нужно, — это хорошо разработанный и хорошо реализованный доменный язык (DSL).

В этом смысле я поддержу то, что рекомендует Норман Рэмси с Lua. Он имеет отличную репутацию базы для высокого качества DSLs. Хорошо документированный и полезный DSL требует времени и усилий, но сэкономит время каждого в долгосрочной перспективе, когда эксперты по предметной области могут быть быстро введены в курс дела и требуют минимальной поддержки.

Поделиться John F. Miller     26 мая 2012 в 00:11



0

Я удивлен, что никто еще не упомянул xtext . Он доступен как Eclipse plugin и IntelliJ plugin . Он предоставляет не только парсер, подобный ANTLR, но и весь конвейер (включая парсер, компоновщик, проверку типов, компилятор), необходимый для DSL. Вы можете проверить его исходный код на Github, чтобы понять, как работает интерпретатор / компилятор.

Поделиться Mann     18 мая 2017 в 16:13



0

Шелковая библиотека только что была опубликована в GitHub. Кажется, он делает большую часть того, о чем вы просите. Он очень прост в использовании. Просто зарегистрируйте функции, которые вы хотите сделать доступными для скрипта, скомпилируйте скрипт в байт-код и выполните его.

Поделиться Jonathan Wood     28 мая 2019 в 22:27


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


Построение простого CMS

Какой язык обычно используется для очень простого CMS? Может ли кто-нибудь порекомендовать очень простой учебник CMS?


Что означает код состояния интерпретатора perl?

Я пытаюсь выполнить копию интерпретатора Perl, используя Java Runtime.exec(). Однако он вернул код ошибки 9 . После запуска файла несколько раз интерпретатор perl таинственным образом начал…


Пример шаблона интерпретатора

Мне любопытно узнать несколько примеров интерпретатора в реальном времени. Я могу найти несколько повторяющихся примеров, таких как пример regular expression. Может ли кто-нибудь указать мне на…


Построение интерпретатора Python на Windows с поддержкой UCS4

Как я могу настроить проект сборки интерпретатора Python для сборки с поддержкой UCS4 на Windows? Например, я хочу создать Python 2.6.9, 64 бита + поддержку UCS4 для Windows. Мы хотим создать…


boost.python экземпляр интерпретатора

Мне нужно использовать boost::python , но я хочу, чтобы контекст интерпретатора был уничтожен после завершения взаимодействия python. Как и когда именно создается экземпляр интерпретатора python и…


Является ли шаблон интерпретатора формой абстрактного синтаксического дерева

Я изучаю паттерны GoF, и пример паттерна интерпретатора из статьи Википедии привлек мое внимание: http://en.wikipedia.org/wiki/ Interpreter_pattern (я специально изучаю фрагмент кода Java). Это…


Новые строки в определении слова с использованием директив интерпретатора Gforth

Я использую директивы интерпретатора (нестандартные ANS) структуры управления Gforth, как описано в разделе руководства 5.13.4 директивы интерпретатора . В основном я хочу использовать слова цикла…


декоратор против интерпретатора паттерна

Недавно я изучил паттерн интерпретатора. Я обнаружил некоторое сходство между декоратором и переводчиком. Они имеют схожую структуру. Я смотрю в этом случае: одно поведение nonTerminal и одно…


callgrind не профилирует функции C, вызываемые языками интерпретатора

Моя основная программа написана C. Код C называет язык интерпретатора, скажем python, своим C APIs. Затем язык интерпретатора перезванивает другому C APIs. Весь код C отлаживаем, интерфейс C языка…


Конфигурация Интерпретатора Zeppelin Docker

Я создал образ Zeppelin docker в своей локальной системе, настроил интерпретатор Spark через репозитории maven и запустил Zeppelin, который работал. Но когда я остановил Docker и снова побежал,…

Интерпретаторы. Давайте создадим компилятор!

Интерпретаторы

Введение

В трех первых частях этой серии мы рассмотрели синтаксический анализ и компиляцию математических выражений, постепенно и методично пройдя от очень простых односимвольных «выражений», состоящих из одного терма, через выражения в более общей форме и закончив достаточно полным синтаксическим анализатором, способным анализировать и транслировать операции присваивания с многосимвольными токенами, вложенными пробелами и вызовами функций. Сейчас я собираюсь провести вас сквозь этот процесс еще раз, но уже с целью интерпретации а не компиляции объектного кода.

Если эта серия о компиляторах, то почему мы должны беспокоиться об интерпретаторах? Просто я хочу чтобы вы увидели как изменяется характер синтаксического анализатора при изменении целей. Я также хочу объединить понятия этих двух типов трансляторов, чтобы вы могли видеть не только различия но и сходства.

Рассмотрим следующее присваивание:

x = 2 * y + 3

В компиляторе мы хотим заставить центральный процессор выполнить это присваивание во время выполнения. Сам транслятор не выполняет никаких арифметических операций… он только выдает объектный код, который заставит процессор сделать это когда код выполнится. В примере выше компилятор выдал бы код для вычисления значения выражения и сохранения результата в переменной x.

Для интерпретатора, напротив, никакого объектного кода не генерируется. Вместо этого арифметические операции выполняются немедленно как только происходит синтаксический анализ. К примеру, когда синтаксический анализ присваивания завершен, x будет содержать новое значение.

Метод, который мы применяем во всей этой серии, называется «синтаксически-управляемым переводом». Как вы знаете к настоящему времен, структура синтаксического анализатора очень близко привязана к синтаксису анализируемых нами конструкций. Мы создали процедуры на Pascal, которые распознают каждую конструкцию языка. Каждая из этих конструкций (и процедур) связана с соответствующим «действием», которое выполняет все необходимое как только конструкция распознана. В нашем компиляторе каждое действие включает выдачу объектного кода для выполнения позднее во время исполнения. В интерпретаторе каждое действие включает что-то для немедленного выполнения.

Что я хотел бы, чтобы вы увидели, это то, что план… структура… синтаксического анализатора не меняется. Изменяются только действия. Так что, если вы можете написать интерпретатор для данного языка, то вы можете также написать и компилятор, и наоборот. Однако, как вы увидите, имеются и отличия, и значительные. Поскольку действия различны, процедуры, завершающие распознавание, пишутся по-разному. Характерно, что в интерпретаторе завершающие подпрограммы распознавания написаны как функции, возвращающие числовое значение вызвавшей их программе. Ни одна из подпрограмм анализа нашего компилятора не делает этого.

Наш компилятор, фактически, это то, что мы могли бы назвать «чистым» компилятором. Как только конструкция распознана, объектный код выдается немедленно. (Это одна из причин, по которым код не очень эффективный.) Интерпретатор, который мы собираемся построить, является чистым интерпретаторов в том смысле, что здесь нет никакой трансляции типа «токенизации», выполняемой над исходным текстом. Это две крайности трансляции. В реальном мире трансляторы не являются такими чистыми, но стремятся использовать часть каждой методики.

Я могу привести несколько примеров. Я уже упомянул один: большинство интерпретаторов, типа Microsoft BASIC, к примеру, транслируют исходный текст (токенизируют его) в промежуточную форму, чтобы было легче выполнять синтаксический анализ в реальном режиме времени.

Другой пример – ассемблер. Целью ассемблера, конечно, является получение объектного кода и он обычно выполняет это по однозначному принципу: одна инструкция на строку исходного кода. Но почти все ассемблеры также разрешают использовать выражения как параметры. В этом случае выражения всегда являются константами, и ассемблер не предназначен выдавать для них объектный код. Скорее он «интерпретирует» выражение и вычисляет соответствующее значение, которое фактически и выдается с объектным кодом.

Фактически, мы могли бы использовать часть этого сами. Транслятор, который мы создали в предыдущей главе, будет покорно выплевывать объектный код для сложных выражений, даже если каждый терм в выражении будет константой. В этом случае было бы гораздо лучше, если бы транслятор вел себя немного как интерпретатор и просто вычислял соответствующее значение константы.

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

К примеру, для данного выражения

x = x + 3 – 2 – (5 – 4)

наш компилятор будет покорно выплевывать поток из 18 инструкций для загрузки каждого параметра в регистры, выполнения арифметических действий и сохранения результата. Ленивая оценка распознала бы, что выражение, содержащее константы, может быть рассчитано во время компиляции и уменьшила бы выражение до

x = x + 0

Даже ленивая оценка была бы затем достаточно умной, чтобы понять, что это эквивалентно

x = x,

что совсем не требует никаких действий. Мы смогли уменьшить 18 инструкций до нуля!

Обратите внимание, что нет никакой возможности оптимизировать таким способом наш компилятор, потому что каждое действие выполняется в нем немедленно.

Ленивая оценка выражений может произвести значительно лучший объектный код чем тот который мы могли произвести. Я, тем не менее, предупреждаю вас: это значительно усложняет код синтаксического анализатора, потому что каждая подпрограмма теперь должна принять решение относительно того, выдать объектный код или нет. Ленивая оценка конечно же названа так не потому, что она проще для создателей компиляторов!

Так как мы действуем в основном по принципу KISS, я не буду более углубляться в эту тему. Я только хочу, чтобы вы знали, что вы можете получить некоторую оптимизацию кода, объединяя методы компиляции и интерпретации. В частности Вы должны знать, что подпрограммы синтаксического анализа в более интеллектуальном трансляторе обычно что-то возвращают вызвавшей их программе и иногда сами ожидают этого. Эта главная причина обсуждения интерпретаторов в этой главе.

Должностная инструкция инженера-интерпретатора

ДОЛЖНОСТНАЯ ИНСТРУКЦИЯ

инженера-интерпретатора

1. Общие положения

1.1. Настоящая должностная инструкция определяет функциональные, должностные обязанности, права и ответственность инженера-интерпретатора подразделения «Комплексные технологии» (далее — Инженер-интерпретатор) Общероссийское объединение работодателей «Российский союз промышленников и предпринимателей» (далее Учреждение).

1.2. На должность инженера-интерпретатора назначается лицо, удовлетворяющее следующим требованиям к образованию и обучению:

  • Высшее образование — бакалавриат;
  • Особые условия допуска к работе инженера-интерпретатора :

  • Прохождение обязательных предварительных (при поступлении на работу) и периодических медицинских осмотров (обследований), а также внеочередных медицинских осмотров (обследований) в установленном законодательством Российской Федерации порядке;
  • Прохождение обучения и аттестации по охране труда, промышленной безопасности в установленном порядке;
  • Обучение мерам пожарной безопасности, включая прохождение противопожарного инструктажа и пожарно-технического минимума по соответствующей программе;
  • 1.3. Инженер-интерпретатор должен знать:

  • Базовые профессиональные знания теории и методов комплексной интерпретации скважинных геофизических данных;
  • Петрофизика, минералогия, петрография, литология, основы гидрогеологии, геохимии, геолого-геофизическая изученность района работ;
  • Правила оформления научно-технической документации, результатов комплексной интерпретации скважинных геофизических данных;
  • Требования нормативно-технической документации к составу и интервальности обязательных комплексов геофизических исследований скважин различных категорий;
  • Требования охраны труда, промышленной, пожарной и экологической безопасности;
  • Таблица соответствия условных обозначений литологическим типам геологического разреза;
  • Основы геологической корреляции разрезов скважин и геологического картирования;
  • Свойства горных пород;
  • Алгоритмы комплексной интерпретации скважинных геофизических данных в открытом стволе, обсаженной скважине, в процессе бурения;
  • Методы оценки ресурсов и подсчета запасов углеводородного сырья;
  • Специализированные программные комплексы для интерпретации скважинных геофизических данных в открытом стволе, обсаженной скважине, в процессе бурения;
  • Теория скважинных геофизических методов;
  • Основы бурения, разработки месторождений полезных ископаемых, их геологии, гидрогеологии;
  • Метрологическое оснащение аппаратуры скважинных геофизических методов;
  • Факторы, влияющие на результаты измерений скважинными геофизическими методами;
  • Способы учета влияния условий измерений на результаты измерений;
  • Специализированные программные комплексы интерпретации скважинных геофизических данных в открытом стволе, обсаженной скважине, в процессе бурения;
  • Требования охраны труда, промышленной, пожарной и экологической безопасности;
  • Способы учета влияния типа аппаратуры на результаты измерений;
  • Аппаратура скважинных геофизических методов в открытом стволе, обсаженной скважине, в процессе бурения;
  • Метрология, стандартизация, сертификация в области геофизических исследований;
  • Базовые профессиональные знания теории и методов индивидуальной интерпретации скважинных геофизических данных;
  • Современные технологии геологоразведочных работ;
  • Правила оформления научно-технической документации, результатов индивидуальной интерпретации скважинных геофизических данных;
  • 1.4. Инженер-интерпретатор должен уметь:

  • Применять методы комплексной интерпретации скважинных геофизических данных в специализированных программных комплексах;
  • Оценивать достоверность результатов комплексной интерпретации скважинных геофизических данных;
  • Использовать специализированные программные комплексы интерпретации скважинных геофизических данных;
  • Оформлять и документировать результаты комплексной интерпретации скважинных геофизических данных;
  • Определять процедуры и параметры процедур для оптимального выделения полезной информации;
  • Оценивать качество и достоверность получаемых результатов исследований скважин;
  • Оформлять и документировать результаты индивидуальной интерпретации скважинных геофизических данных;
  • Коррелировать по площади аномалии геофизических полей;
  • Определять процедуры и параметры процедур для оптимального выделения полезной информации;
  • Оценивать качество результатов индивидуальной интерпретации скважинных геофизических данных;
  • Применять методы индивидуальной интерпретации скважинных геофизических данных в специализированных программных комплексах;
  • 1.5. Инженер-интерпретатор назначается на должность и освобождается от должности приказом управляющего директоруправления развития квалификаций Учреждения в соответствии с действующим законодательством Российской Федерации.

    1.6. Инженер-интерпретатор подчиняется управляющему директоруправлению развитию квалификациям Учреждения и начальнику подразделения «Комплексные технологии»

    2. Трудовые функции

  • 2.1. Комплексная интерпретация данных скважинных геофизических методов, полученных в нефтегазовых скважинах.
  • 2.2. Интерпретация данных индивидуальных скважинных геофизических методов, полученных в нефтегазовых скважинах.
  • 3. Должностные обязанности

  • 3.1. Построение планшета комплекса скважинных геофизических данных с согласованием данных индивидуальных геофизических методов по глубине для комплексной интерпретации.
  • 3.2. Построение литологической модели горных пород, вскрытых скважиной, по комплексу скважинных геофизических данных.
  • 3.3. Создание сводного геолого-геофизического планшета с исходными данными геофизических исследований скважин, геофизическими параметрами, результатами комплексной интерпретации скважинных геофизических данных и сопутствующей геологической, литологической, петрофизической и промыслово-геофизической информацией при ее наличии.
  • 3.4. Определение петрофизических характеристик горных пород, вскрытых скважиной, по комплексу скважинных геофизических данных.
  • 3.5. Корреляция объектов по геофизическим данным и данным бурения в трехмерном пространстве.
  • 3.6. Ведение научно-технической документации, составление заключений и глав в отчеты по комплексной интерпретации данных геофизических исследований скважин.
  • 3.7. Выполнение работ по геометризации, прогнозу форм, свойств и ранжированию аномалиеобразующих геологических объектов при увязке с данными бурения.
  • 3.8. Определение физических свойств горных пород с применением специализированных алгоритмов интерпретации скважинных геофизических данных.
  • 3.9. Построение планшетов данных геофизических исследований скважин.
  • 3.10. Оценка геолого-геофизической информации.
  • 3.11. Ведение технической документации по индивидуальным скважинным геофизическим методам.
  • 3.12. Определение интерпретационных величин на диаграммах индивидуальных скважинных геофизических методов с учетом геолого-технологических условий измерений и типа аппаратуры.
  • Изменить трудовые функции

    4. Права

    Инженер-интерпретатор имеет право:

    4.1. Запрашивать и получать необходимую информацию, а так же материалы и документы, относящиеся к вопросам деятельности инженера-интерпретатора .

    4.2. Повышать квалификацию, проходить переподготовку (переквалификацию).

    4.3. Вступать во взаимоотношения с подразделениями сторонних учреждений и организаций для решения вопросов, входящих в компетенцию инженера-интерпретатора .

    4.4. Принимать участие в обсуждении вопросов, входящих в его функциональные обязанности.

    4.5. Вносить предложения и замечания по вопросам улучшения деятельности на порученном участке работы.

    4.6. Обращаться в соответствующие органы местного самоуправления или в суд для разрешения споров, возникающих при исполнении функциональных обязанностей.

    4.7. Пользоваться информационными материалами и нормативно-правовыми документами, необходимыми для исполнения своих должностных обязанностей.

    4.8. Проходить в установленном порядке аттестацию.

    5. Ответственность

    Инженер-интерпретатор несет ответственность за:

    5.1. Неисполнение (ненадлежащее исполнение) своих функциональных обязанностей.

    5.2. Невыполнение распоряжений и поручений управляющего директоруправления развития квалификаций Учреждения.

    5.3. Недостоверную информацию о состоянии выполнения порученных заданий и поручений, нарушении сроков их исполнения.

    5.4. Нарушение правил внутреннего трудового распорядка, правила противопожарной безопасности и техники безопасности, установленных в Учреждении.

    5.5. Причинение материального ущерба в пределах, установленных действующим законодательством Российской Федерации.

    5.6. Разглашение сведений, ставших известными в связи с исполнением должностных обязанностей.

    За вышеперечисленные нарушения инженер-интерпретатор может быть привлечен в соответствии с действующим законодательством в зависимости от тяжести проступка к дисциплинарной, материальной, административной, гражданской и уголовной ответственности.

    Настоящая должностная инструкция разработана в соответствии с положениями (требованиями) Трудового кодекса Российской Федерации от 30.12.2001 г. № 197 ФЗ (ТК РФ) (с изменениями и дополнениями), профессионального стандарта «Специалист по обработке и интерпретации скважинных геофизических данных (в нефтегазовой отрасли)» утвержденного приказом Министерства труда и социальной защиты Российской Федерации от 29 июня 2017 г. № 525н и иных нормативно–правовых актов, регулирующих трудовые отношения.

    Поделиться должностной инструкцией в соцсетях:

    Почему первый компилятор был написан до первого интерпретатора?

    Первые языки программирования были довольно простыми (например, без рекурсии) и были близки к машинной архитектуре, которая сама по себе была простой. Перевод был тогда простым процессом .

    Компилятор был проще как программа, чем интерпретатор, который должен был бы хранить вместе данные для выполнения программы и таблицы для интерпретации исходного кода. И интерпретатору потребовалось бы больше места для себя, для исходного кода программы и для символьных таблиц.

    Памяти может быть так мало (как по стоимости, так и по архитектурным причинам), что компиляторы могут быть автономными программами, которые перезаписывают операционную систему (я использовал одну из них). После компиляции ОС необходимо было перезагрузить, чтобы запустить скомпилированную программу. … что дает понять, что работать переводчиком для реальной работы просто не вариант .

    Чтобы быть правдой, простота, требуемая от компиляторов, была такова, что компиляторы были не очень хороши (оптимизация кода все еще находилась в зачаточном состоянии, когда вообще рассматривалась). Рукописный машинный код имел, по крайней мере, до конца шестидесятых годов, репутацию значительно более эффективного, чем код, сгенерированный компилятором. Была даже концепция коэффициента расширения кода , которая сравнивала размер скомпилированного кода с работой очень хорошего программиста. Обычно оно было больше 1 для большинства (всех?) Компиляторов, что означало более медленные программы и, что гораздо важнее, более крупные программы, требующие больше памяти. Это было все еще проблемой в шестидесятых.

    Интерес компилятора заключался в простоте программирования, особенно для пользователей, которые не были специалистами по вычислительной технике, таких как ученые в различных областях. Этот интерес был не производительность кода. Но все же время программиста считалось дешевым ресурсом. Стоимость была в компьютерное время, до 1975-1980, когда стоимость перешла от аппаратного обеспечения к программному обеспечению. Это означает, что некоторые профессионалы не воспринимали всерьез даже компилятор .

    Очень высокая стоимость компьютерного времени была еще одной причиной дисквалификации переводчиков , так что сама идея была бы смешной для большинства людей.

    Случай с Лиспом очень особенный, потому что это был чрезвычайно простой язык, который сделал его выполнимым (а компьютер стал немного больше в 58). Что еще более важно, интерпретатор Lisp был доказательством концепции самоопределимости Lisp ( мета-цикличности ), независимо от какой-либо проблемы юзабилити.

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

    The Interpreter (2005) — Краткое содержание сюжета

  • Политические интриги и обман разворачиваются внутри Организации Объединенных Наций, где агенту Секретной службы США поручается расследовать дело переводчика, который подслушивает заговор с убийством.

  • События обостряются, когда переводчик ООН Сильвия Брум утверждает, что она подслушала угрозу убийством главу африканского государства, говорящую на редком диалекте, понятном немногим, кроме Сильвии.Со словами «Учитель никогда не выйдет из этой комнаты живым» в мгновение ока жизнь Сильвии переворачивается с ног на голову, поскольку она становится преследуемой целью убийц. Мир Сильвии, находящийся под защитой федерального агента Тобина Келлера, становится еще более кошмарным. По мере того, как Келлер все глубже копается в прошлом своих очевидцев и ее секретном мире глобальных связей, он становится все более подозрительным, что она сама может быть причастна к заговору. С каждым шагом он находит все больше причин не доверять ей.Сильвия — жертва? Подозреваемый? Или что-то совсем другое? И сможет ли Тобин, справляясь со своей личной душевной болью, защитить ее? Хотя они должны зависеть друг от друга, Сильвия и Тобин совершенно разные. Сильные стороны Сильвии — это слова, дипломатия и тонкости смысла, в то время как Тобин — это инстинкт, действие и понимание самых примитивных человеческих поступков. Теперь, когда опасность крупного убийства на территории США растет, а жизнь Сильвии висит на волоске, Сильвия и Тобин разыгрывают захватывающий танец уклонений и откровений, который заставляет их обоих гадать, когда они мчатся, чтобы остановить ужасающий международный кризис, пока он не стал слишком большим. поздно.

  • Сильвия Брум (Николь Кидман) — переводчик, работающий в ООН в Нью-Йорке. Она выросла в республике Матобо, вымышленной африканской стране, но имеет двойное гражданство. ООН рассматривает возможность предъявления обвинения президенту Матобо Эдмонду Зувани (графу Кэмерону) для предания его суду в Международном уголовном суде. Первоначально освободитель, за последние 20 лет он стал таким же коррумпированным и деспотичным, как и правительство, которое он свергнул, и теперь несет ответственность за этнические чистки и другие зверства в Матобо.Зувание скоро посетит ООН и представит свое дело Генеральной Ассамблее, пытаясь избежать обвинительного заключения.

    Из-за паники сотрудники службы безопасности вынуждены эвакуироваться из здания ООН, и Сильвия возвращается ночью, чтобы забрать некоторые личные вещи. В это время она подслушивает обсуждение заговора с убийством и в испуге убегает из здания, когда те, кто обсуждает заговор, узнают о ее присутствии. На следующий день Сильвия узнает слова на встрече, где она интерпретирует фразы, которые она подслушала накануне вечером, и сообщает об инциденте У.N. безопасность; Похоже, что целью заговора является сам Зувани. Они, в свою очередь, звонят в Секретную службу США, которая поручает Тобину Келлеру (Шон Пенн) и Дот Вудс (Кэтрин Кинер) провести расследование, а также защитить Зувани, когда он прибудет. Келлер узнает, что Сильвия в прошлом участвовала в партизанской группе Матобан, что ее родители и сестра были убиты фугасами, заложенными людьми Зувани, и что она встречалась с одним из политических противников Зувани. Хотя Келлер с подозрением относится к истории Сильвии, эти двое сближаются, и Келлер в конечном итоге защищает ее от нападений на нее.Позже Сильвия обнаруживает, что ее брат Саймон и ее любовник Ксола были убиты (как показано в начальной сцене).

    Предполагаемый убийца обнаруживается, когда Зувани находится в середине своего обращения к Генеральной Ассамблее, и сотрудники службы безопасности спешат Зувани в безопасную комнату для его защиты. Сильвия, ожидая этого, пряталась в безопасной комнате, противостоит Зувани и намеревается убить его сама. Келлер определяет, что заговор с убийством — это операция под ложным флагом, созданная Зувани, чтобы убедить его в том, что его соперники являются террористами, и сдержать потенциальных сторонников его устранения.Келлер бросается в безопасную комнату и прибывает как раз вовремя, чтобы не дать Сильвии убить Зувани. Зувани обвиняется, и Сильвия высылается из США, вскоре после этого она возвращается домой в Матобо

  • Переводчик против переводчика — Американская ассоциация переводчиков (ATA)

    Переводчики говорят

    Переводчики работают с устным словом, переводя речь с исходного языка на целевой. Это гораздо больше, чем свободное владение двумя языками.Переводчик также должен передать стиль и тон говорящего, принимая во внимание различия в культуре, диалекте и обстановке. Слушатели должны слышать интерпретируемое сообщение так, как если бы оно было изначально произнесено на их родном языке.

    Переводчики обычно работают в двух направлениях

    Большинство переводчиков работают в двух направлениях, что означает, что переводчик часто работает как с целевым, так и с исходным языками.

    Хорошие говорящие на родном языке

    Переводчики не только понимают исходный язык, но и очень хорошо общаются на целевом языке.

    Параметр определяет способ интерпретации

    Синхронный перевод

    Синхронный перевод требует, чтобы переводчик слушал и понимал на одном языке (исходный), «одновременно» обеспечивая перевод на второй язык (целевой).

    Настройки для синхронного перевода включают судебные заседания, международные встречи, телевизионные выпуски новостей и пресс-конференции. Сессии в Организации Объединенных Наций — это наиболее широко распространенный вид использования синхронного перевода.

    Последовательный перевод

    Последовательный перевод требует, чтобы переводчик услышал несколько полных предложений на одном языке (исходном) до того, как говорящий остановится, чтобы переводчик мог обеспечить перевод на второй язык (целевой).

    Настройки для последовательного перевода включают небольшие встречи, личное общение и сеансы вопросов и ответов, такие как интервью поверенного с клиентом и встречи врача с пациентом.

    Часто специализируются по предметным областям

    Переводчики часто специализируются в определенных предметных областях, таких как право, медицина, бизнес, банковское дело, технологии, наука и литература.Специализация требует глубоких знаний предмета и его терминологии как на исходном, так и на целевом языках

    Одно общее требование

    Чтобы работать эффективно и точно, переводчики должны четко слышать говорящего. Также полезно — и желательно — если переводчик может видеть говорящего.

    Обычно оплачивается по месту работы

    Переводчики

    устанавливают свои ставки в зависимости от продолжительности работы — почасовая, полдня или полный рабочий день. Если вам нужен переводчик на целый день, обязательно укажите, 7, 8 или более часов в день.

    Определение переводчика Merriam-Webster

    in · ter · pret · er | \ in-ˈtər-prə-tər , -pə- \

    а : Тот, кто переводит устно для сторон, разговаривающих на разных языках.

    б : Тот, кто объясняет или разъясняет

    : Машина, печатающая на перфокартах символы, записанные на них путем перфорации.

    б : компьютерная программа, которая выполняет каждую из набора высокоуровневых инструкций перед переходом к следующей инструкции.

    афганских переводчиков говорят, что предложения австралийской визы недостаточно для их безопасности | Афганистан


    Федеральное правительство заявляет, что с начала мая оно предоставило дополнительно 90 виз афганским гражданам, которые работали вместе с австралийскими силами, но переводчики, все еще находящиеся в стране, предупредили, что им все еще мешает избежать мести талибов. .

    Guardian Australia понимает, что официальные лица предложили помочь афганцам совершить коммерческие рейсы в Австралию в ближайшем будущем, но один переводчик, все еще находящийся в Афганистане, сказал, что ему известно о 15 коллегах, которым было разрешено переселение, но которые не могли летать в ближайшее время. будущее, потому что пандемия Covid означала, что полеты были недоступны.

    Выступая во вторник из Кабула, он сказал, что без доступа к военным рейсам их положение не изменится.

    «Если они не могут нас переселить, какой смысл в визе?» — сказал мужчина.Он был среди 41 переводчика, который дважды писал правительству в начале этого года с просьбой о срочной помощи.

    В прошлом месяце Австралия внезапно закрыла свое посольство в Кабуле, заявив, что не может гарантировать безопасность персонала в свете предстоящего вывода австралийских войск к 11 сентября.

    Во вторник другой переводчик сказал, что его семья ожидает паспортов, но без доступа к посольству и его сотрудникам он не был уверен, что сможет уехать.

    Один бывший переводчик был отправлен в подполье, опасаясь за жизнь своей молодой семьи, после того, как письмо с печатью и подписью талибов было приклеено к его входным воротам, о чем впервые сообщила ABC.

    В проверенной версии, полученной Guardian, командир талибов Спин Талиб, который отвечает за партизанские операции в Кандагаре, признался в предыдущих попытках убить Хасана (имя изменено), предупредив его, что они придут за ним «день или ночь». ночь »за участие в 20-летней войне с коалиционными силами.

    «Мы получили сообщения, что вы долгое время работали с неверными врагами Исламского Эмирата Афганистан в качестве переводчика и раба», — говорится в письме от 3 июня.

    «Мы пытались убить вас, сбив вас транспортным средством, но, к сожалению, вы не умерли.

    «Мы честны в своих словах, мы достанем вас, будь то день или ночь, и вы будете наказаны, и мы достигнем своей цели».

    Бывший премьер-министр Кевин Радд присоединился к растущим призывам Австралии помочь в эвакуации граждан Афганистана и обратился к министру внутренних дел Карен Эндрюс с призывом к незамедлительным действиям.

    Радд упомянул угрозу талибов Хасану, когда он призвал Эндрюса «быстро прийти к заключению» в письме, полученном исключительно Guardian.

    «На карту поставлены более широкие политические последствия. Представление о том, что Австралия не поступила честно по отношению к местным афганским служащим, может иметь разрушительные последствия в других условиях, когда австралийскому персоналу требуется поддержка местных жителей », — написал бывший премьер-министр.

    «На карту поставлен национальный интерес в том, чтобы люди, которые подвергали себя опасности, поддерживая цели австралийского правительства, видели, что поступают правильно».

    SBS сообщило во вторник, что десятки афганцев, которые работали вместе с АДС, и их семьи готовились к эвакуации в Австралию в ближайшие недели.

    Представитель министра иммиграции Алекса Хоука сообщил, что с начала мая правительство предоставило около 90 дополнительных виз местным сотрудникам. Вместе с членами семьи это добавляет 200 граждан Афганистана, которые были переселены в Австралию с момента начала реализации этой программы для местных рабочих в 2013 году. Ранее было известно, что с момента начала действия этой программы было осуществлено 1200 таких переселений.

    Ранее во вторник Скотт Моррисон заявил журналистам, что правительство «работает срочно и упорно», чтобы решить эту проблему.

    «Это не первый раз, когда нам приходится поддерживать в этих обстоятельствах, доставляя людей в Австралию с соответствующими визовыми условиями для гуманитарных виз, которые существуют», — сказал премьер-министр.

    Письмо с угрозами, приклеенное к двери Хасана.

    «Раньше мы делали это безопасно. И мы сможем сделать это снова … Мы это прекрасно понимаем. И мы работаем срочно, упорно и терпеливо, чтобы сделать это надлежащим образом, как мы делали это раньше.Я был ответственным министром в то время, когда мы в последний раз занимались этим, когда я был в иммиграционной службе, поэтому я очень хорошо осведомлен о чувствительности и необходимости действовать быстро ».

    Во время работы Хасана с австралийцами в период с 2010 по 2014 год ему был предоставлен самый высокий уровень допуска, разрешенный для переводчиков, что позволило ему жить на базе вместе с солдатами.

    Он сказал, что если он не сможет приехать в Австралию, его «ждет смерть» от рук талибов.

    «Я потратил годы на поддержку боевых миссий ADF на передовой войны и рискнул своей жизнью, чтобы поддержать борьбу против повстанцев, Талибана, плечом к плечу для ADF», — сказал Хасан Guardian Australia.

    «Талибан по-прежнему будет нападать на меня, и мою семью могут арестовать, похитить, убить или даже обезглавить в любой момент.

    «Я каждый день считаю свою жизнь, дни и ночи, до смерти, потому что талибы убили многих афганских переводчиков с тех пор, как силы коалиции объявили, что их войска ушли в их дом, и я просто жду своей очереди смерти».

    В 2013 году Хасан был сертифицирован правительством Австралии как «человек, у которого есть законные опасения за свою безопасность в результате его прежней работы переводчиком коалиционных сил».

    Это означало, что он имел право на гуманитарную визу в рамках программы, которая предлагает переселение для местных афганских служащих. Его заявление было отклонено тогдашним министром внутренних дел Питером Даттоном до того, как это решение было отменено как незаконное в знаменательной битве в федеральном суде в Май 2020 года в лице Джейсона Сканеса, бывшего капитана армии и основателя Forsaken Fighters.

    Теперь решение по делу Хасана остается за Эндрюсом.

    В апреле Guardian сообщила, что 41 переводчик направил письма в отделы внутренних дел и иммиграции через посольство Австралии в Иордании в январе и еще раз 19 апреля после того, как Скотт Моррисон объявил, что Австралия последует за США и выведет все оставшиеся войска к сентябрю.

    Один из мужчин, перечисленных в письме, сказал, что ему известно о 15 переводчиках, которым было разрешено переселение, но которые не смогли летать в ближайшем будущем из-за отсутствия коммерческих рейсов из-за COVID-19.

    5 качеств, которыми должен обладать каждый переводчик

    Владение более чем одним языком — это впечатляет. Но иметь возможность профессионально переводить для человека, говорящего на другом языке? Это еще больший подвиг.

    Переводчики передают идеи говорящим на иностранном языке в различных средах, некоторые из которых, возможно, меняют жизнь.Устный перевод в зале суда и в медицинских учреждениях дает тем, кто не является носителем языка, голос, которого у них не было бы в противном случае, он позволяет расшифровывать звонки службы экстренной помощи и свидетельские показания.

    Они делают возможным бизнес для международных компаний и клиентов и преодолевают культурные и языковые барьеры. Одним словом, переводчики — важные люди.

    Но, как и в любой отрасли, одни профессионалы лучше других. Эффективный языковой переводчик обладает не только первоклассными языковыми навыками — он может сочетать ряд лингвистических и межличностных способностей, чтобы выполнять свою работу правильно.

    1) Великолепные языковые навыки

    Прежде всего, переводчики должны иметь исчерпывающее знание языка, на котором они переводят. Это кажется очевидным, но это не всегда так. Когда переводчик работает в поле, у него, вероятно, нет времени обратиться к энциклопедии или словарю. Обязательно наличие обширного словарного запаса и отличных письменных и устных коммуникативных навыков.

    Переводчик должен уметь говорить так же хорошо, а желательно лучше, чем носитель языка.Отличные грамматические знания и способность интерпретировать идиомы, нюансы и метафоры в разговоре необходимы для эффективного общения.

    2) Специальные знания

    Большинство переводчиков работают в определенной отрасли или сфере (например, здравоохранение, юриспруденция, финансы и т. Д.). Это означает, что они должны обладать специальными знаниями в определенной области, чтобы быть успешными коммуникаторами. Даже несмотря на то, что кто-то может быть прекрасным многоязычным оратором, он не смог бы далеко продвинуться в предоставлении медицинских переводческих услуг в больнице, если бы у него не было опыта со словарем и жаргоном.

    3) Аккредитация

    Сертификация или аккредитация авторитетного устного учреждения показывает, что переводчик выполнил необходимую работу и имеет все необходимые полномочия для выполнения этой работы. Те, кто прошел профессиональную подготовку, будут лучше разбираться не только в языковых требованиях, но и в кодексах этики, применяемых переводчиками.

    В то же время тот, кто получил полномочия, с меньшей вероятностью совершит ошибку на работе.А ошибки могут привести к серьезным последствиям как для переводчиков, так и для организаций, в которых они работают.

    4) Мягкие навыки

    Хороший переводчик — это больше, чем просто опытный лингвист — он или она — это тот, кто хочет и может быть хорошим, сострадательным слушателем. Ситуации, связанные с устным переводом, могут быть пугающими для тех, для кого не является родным языком, и переводчик должен постараться сделать этот опыт максимально комфортным. Вторым по важности для выдающихся языковых навыков является способность общаться с широким кругом людей.Эти бесценные связи необходимы любому сильному переводчику.

    5) Культурная компетентность

    Переводчики должны не только хорошо владеть более чем одним языком, но и понимать культурные особенности языков, на которых они переводят. Это способность обнаруживать определенные невербальные сигналы или обычаи, характерные для определенной группы людей или географического места. Хорошее понимание культурных норм поможет переводчику лучше передать то, что не носитель языка пытается донести.

    Хороший переводчик — чуткий слушатель

    Независимо от того, в какой отрасли они работают, переводчики должны обладать широким спектром лингвистических навыков и навыков межличностного общения. Языковое образование и опыт закладывают прочную основу для устных переводчиков, но не менее важна способность быть чутким слушателем.

    Если вы хотите узнать больше о том, что такое эффективный переводчик, и дополнительные советы по языковым решениям, прочтите наш блог полностью.

    Что такое переводчик? — Определение из Техопедии

    Что означает переводчик?

    Интерпретатор — это компьютерная программа, которая используется для непосредственного выполнения программных инструкций, написанных с использованием одного из многих языков программирования высокого уровня.

    Интерпретатор преобразует высокоуровневую программу в промежуточный язык, который затем выполняет, или может анализировать высокоуровневый исходный код, а затем выполнять команды напрямую, что выполняется построчно или оператор за оператором.

    Техопедия объясняет переводчика

    Люди могут понимать только языки высокого уровня, которые называются исходным кодом. С другой стороны, компьютеры могут понимать только программы, написанные на двоичных языках, поэтому требуется либо интерпретатор, либо компилятор.

    Языки программирования реализованы двумя способами: интерпретация и компиляция. Как следует из названия, интерпретатор преобразует или интерпретирует программный код высокого уровня в код, который может быть понят машиной (машинный код), или в промежуточный язык, который также может быть легко выполнен.

    Интерпретатор считывает каждый оператор кода, а затем преобразует или выполняет его напрямую. Напротив, ассемблер или компилятор преобразует исходный код высокого уровня в собственный (скомпилированный) код, который может выполняться непосредственно операционной системой (например, путем создания программы .exe).

    И компиляторы, и интерпретаторы имеют свои преимущества и недостатки и не исключают друг друга; это означает, что их можно использовать вместе, поскольку большинство интегрированных сред разработки используют как компиляцию, так и перевод для некоторых языков высокого уровня.

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

    Хотя время анализа исходного кода сокращается, особенно большого, время выполнения для интерпретатора сравнительно медленнее, чем для компилятора. Вдобавок ко всему, поскольку интерпретация выполняется для каждой строки или оператора, ее можно остановить в середине выполнения, чтобы можно было либо изменить код, либо отладить.

    Компиляторы должны генерировать промежуточный объектный код, для которого требуется больше памяти для связывания, в отличие от интерпретаторов, которые, как правило, используют память более эффективно.

    Поскольку интерпретатор считывает и затем выполняет код в одном процессе, он очень полезен для написания сценариев и других небольших программ. Таким образом, он обычно устанавливается на веб-серверах, на которых выполняется множество исполняемых сценариев. Он также используется на этапе разработки программы для тестирования небольших фрагментов кода один за другим, вместо того, чтобы каждый раз компилировать всю программу.

    Каждый исходный оператор будет выполняться построчно во время выполнения, что особенно ценится в целях отладки для немедленного распознавания ошибок. Переводчики также используются в образовательных целях, поскольку их можно использовать, чтобы показать студентам, как программировать по одному сценарию за раз.

    Языки программирования, использующие интерпретаторы, включают Python, Ruby и JavaScript, в то время как языки программирования, использующие компиляторы, включают Java, C ++ и C.

    Определение и значение переводчика | Словарь английского языка Коллинза

    Примеры ‘переводчик’ в предложении

    переводчик

    Эти примеры были выбраны автоматически и могут содержать конфиденциальный контент.Читать далее… В нем говорилось, что он был взрослым переводчиком, работающим в Министерстве внутренних дел.

    Солнце (2016)

    Конечно, многие артисты просто прекрасные певцы и переводчики.

    The Sun (2010)

    Дело велось через переводчика с языка жестов.

    Солнце (2013)

    Рискнули бы они на такое ради одного переводчика?

    Times, Sunday Times (2012)

    Бывшие переводчики утверждают, что политика не соответствует цели.

    Times, Sunday Times (2014)

    Вместо этого она предпочла платить за устных переводчиков и переводы на иностранные языки.

    The Sun (2013)

    Пока что только один переводчик подвергается достаточно высокому риску для получения визы.

    Times, Sunday Times (2014)

    Если один переводчик в опасности, то другой.

    Times, Sunday Times (2013)

    Один британский переводчик, работавший с полицией, сказал, что они все еще использовали свое положение для преследования племенных соперников.

    Times, Sunday Times (2013)

    Но вы также интерпретатор музыки.

    Times, Sunday Times (2009)

    Подробнее…

    Но когда мы думаем об этих великих песнях, мы также думаем об их великолепных интерпретаторах.

    Литературное приложение к The Times (2008)

    Колоссальная потеря для британской музыки как интерпретатора музыки обоих композиторов.

    Times, Sunday Times (2008)

    Они также предсказывают будущую нехватку письменных и устных переводчиков и учителей языков.

    Times, Sunday Times (2013)

    Другой переводчик отработал на неделю меньше годового минимума.

    Times, Sunday Times (2009)

    Это предложение также применяется ретроспективно к переводчикам, которые работали на правительство, но перестали это делать.

    Times, Sunday Times (2007)

    Есть также возможность работать через переводчика или помогать англоговорящему служению дома.