Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Набор правил, определяющих правильно структурированные программы.
Set of rules defining correctly structured programs
В информатике синтаксис компьютерного языка — это набор правил, определяющих допустимые комбинации символов, которые рассматриваются как правильно сформированные операторы или выражения в этом языке. Это применимо как к языкам программирования, где документ представляет собой исходный код, так и к языкам разметки, где документ представляет собой данные. Синтаксис языка определяет его поверхностную структуру. Текстовые компьютерные языки основаны на последовательностях символов, а визуальные языки программирования — на пространственном расположении и связях между символами (которые могут быть текстовыми или графическими). Документы, имеющие синтаксические ошибки, считаются синтаксически недействительными. При разработке синтаксиса языка разработчик может начать с записи примеров как допустимых, так и недопустимых строк, прежде чем пытаться вывести общие правила из этих примеров. Таким образом, синтаксис относится к форме кода и противопоставляется семантике — его значению. При обработке компьютерных языков семантический анализ обычно следует за синтаксическим анализом; однако в некоторых случаях семантический анализ необходим для полного синтаксического анализа, и они выполняются совместно или параллельно. В компиляторе синтаксический анализ составляет часть фронтенда, а семантический анализ — часть бэкенда (и промежуточного звена, если этот этап выделен).
In computer science, the syntax of a computer language is the rules that define the combinations of symbols that are considered to be correctly structured statements or expressions in that language. This applies both to programming languages, where the document represents source code, and to markup languages, where the document represents data. The syntax of a language defines its surface form. Text based computer languages are based on sequences of characters, while visual programming languages are based on the spatial layout and connections between symbols (which may be textual or graphical). Documents that are syntactically invalid are said to have a syntax error. When designing the syntax of a language, a designer might start by writing down examples of both legal and illegal strings, before trying to figure out the general rules from these examples. Syntax therefore refers to the form of the code, and is contrasted with semantics – the meaning. In processing computer languages, semantic processing generally comes after syntactic processing; however, in some cases, semantic processing is necessary for complete syntactic analysis, and these are done together or concurrently. In a compiler, the syntactic analysis comprises the frontend, while the semantic analysis comprises the backend (and middle end, if this phase is distinguished).
Определение синтаксиса
Синтаксис текстовых языков программирования обычно определяется с использованием комбинации регулярных выражений (для лексической структуры) и формы Бэкуса — Наура (метаязыка для грамматической структуры) для индуктивного определения синтаксических категорий (нетерминальных) и терминальных символов. Хотя общий синтаксис чувствителен к контексту (из-за объявлений переменных и вложенных областей видимости), следовательно, относится к типу 1. Однако существуют исключения, и для некоторых языков грамматика относится к типу 0 (полностью Тьюринг-полная). В некоторых языках, таких как Perl и Lisp, спецификация (или реализация) языка допускает конструкции, выполняемые на этапе разбора. Более того, эти языки предоставляют конструкции, позволяющие программисту изменять поведение парсера. Эта комбинация фактически стирает грань между разбором и выполнением, делая синтаксический анализ неразрешимой задачей в этих языках, что означает, что этап разбора может не завершиться. Например, в Perl можно выполнять код во время разбора с помощью оператора BEGIN, а прототипы функций Perl могут изменять синтаксическую интерпретацию и, возможно, даже синтаксическую корректность оставшегося кода. В разговорной речи это называют «только Perl может разбирать Perl» (потому что код должен выполняться во время разбора и может изменять грамматику) или, более строго, «даже Perl не может разбирать Perl» (потому что задача неразрешима). Аналогично, макросы Lisp, вводимые синтаксисом `defmacro`, также выполняются во время разбора, что означает, что компилятор Lisp должен иметь в своем распоряжении полную среду выполнения Lisp. В отличие от этого, макросы C — это просто замена строк и не требуют выполнения кода.
The syntax of textual programming languages is usually defined using a combination of regular expressions (for lexical structure) and Backus–Naur form (a metalanguage for grammatical structure) to inductively specify syntactic categories (nonterminal) and terminal symbols. though the overall syntax is context sensitive (due to variable declarations and nested scopes), hence Type 1. However, there are exceptions, and for some languages the phrase grammar is Type 0 (Turing complete). In some languages like Perl and Lisp the specification (or implementation) of the language allows constructs that execute during the parsing phase. Furthermore, these languages have constructs that allow the programmer to alter the behavior of the parser. This combination effectively blurs the distinction between parsing and execution, and makes syntax analysis an undecidable problem in these languages, meaning that the parsing phase may not finish. For example, in Perl it is possible to execute code during parsing using a BEGIN statement, and Perl function prototypes may alter the syntactic interpretation, and possibly even the syntactic validity of the remaining code. Colloquially this is referred to as "only Perl can parse Perl" (because code must be executed during parsing, and can modify the grammar), or more strongly "even Perl cannot parse Perl" (because it is undecidable). Similarly, Lisp macros introduced by the defmacro syntax also execute during parsing, meaning that a Lisp compiler must have an entire Lisp run time system present. In contrast, C macros are merely string replacements, and do not require code execution.