LINUX.ORG.RU

Контекстно зависимые языки

 , ,


0

2

Я немного не понимаю смысл понятия «контекстно зависимый язык». Является ли javascript контекстно зависимым из-за того, что значение this определяется в момент исполнения кода? т. е.

function foo(){
  this.x = 1
}
var a = {}
a.f = foo
a.f()
// a.x == 1

★★★★★

Вы ебанулись?

anonymous
()

может википидию открыть для начала?

nokachi
()

Грамматики относится к синтаксису. this - к семантике. Синтаксис лишь часть языка, грань нечеткая, определяется стандрартом: но чем конкретнее грамматика (раньше отвергает некорректные программы) и чем халяльнее (свободная, однозначная, короткая) - тем лучше. На практиче почти вся языки - свободные с небольшими специальными случаями.

anonymous
()

Пример контекстной зависимости в js:

delete x.foo;
x.delete = 1;

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

dmitry_vk ★★★
()
Ответ на: комментарий от anonymous

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

К сожалению, на практике многие языки - почти свободные. Т.е., обычно есть одно или несколько правил в грамматике, которые зависят от синтаксического контекста.

dmitry_vk ★★★
()

Является ли javascript контекстно зависимым из-за того, что значение this определяется в момент исполнения кода?

НЕТ!!!111

emulek
()
Ответ на: комментарий от dmitry_vk

К сожалению, на практике многие языки - почти свободные.

ну раз «к сожалению», то придумай свой ЯП СБИШ.

emulek
()
Ответ на: комментарий от dmitry_vk

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

anonymous
()
Ответ на: комментарий от dmitry_vk

А грамматика, которая определяет вещественное число, у тебя тоже контекстно-зависимая? Ну, то есть, если до разделителя - это целая часть, если после разделителя - то дробная, выходит смысл числа зависит от контекста!!11!! А если еще и экспоненциальную форму записи добавим - то ж ваще туши свет будит!!111

anonymous
()
Ответ на: комментарий от anonymous

А грамматика, которая определяет вещественное число, у тебя тоже контекстно-зависимая?

А разве нет? Разъясни анонимус.

Kuzy ★★★
()
Ответ на: комментарий от Kuzy

А разве нет?

Нет. Зависимость грамматики от контекста означает вполне конкретную строгую вещь: допустимые продукции нетерминального символа зависят от терминальных или нетерминальных символов слева или справа от него.

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

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

dmitry_vk ★★★
()
Последнее исправление: dmitry_vk (всего исправлений: 1)
Ответ на: комментарий от dmitry_vk

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

На вики написано, что это те у которых слева один нетерминальный символ, во всех продукциях.

Вроде да, все правильно тогда.

float -> int . nat
int -> - nat
int -> nat
nat -> n nat
nat -> n
n -> 0
n -> 1
...
n -> 9

Я перепутал с регулярными. *вопрос про них*

Kuzy ★★★
()
Ответ на: комментарий от Kuzy

На вики написано, что это те у которых слева один нетерминальный символ, во всех продукциях.

Это я про контексто свободные (а не зависимые как у вас), по диагоняли прочитал.

Kuzy ★★★
()
Ответ на: комментарий от dmitry_vk

В таком случае, можно ли считать common lisp контекстно зависимым, если здесь foo и функция и значение? Я правильно вас понял?

(defun foo(a) (+ a 1))
(defvar foo 1)
(print (foo foo)) ; 2

Aswed ★★★★★
() автор топика
Ответ на: комментарий от Aswed

В таком случае, можно ли считать common lisp контекстно зависимым, если здесь foo и функция и значение? Я правильно вас понял?

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

Применительно к ЯП можно рассматривать, является ли его грамматика КС или КЗ. У common lisp синтаксис нельзя задать в виде формального языка из-за возможности определять reader macros, которые меняют синтаксис. Если не принимать во внимание возможность расширения синтаксиса, то, вроде бы, можно сделать КС-грамматику.

dmitry_vk ★★★
()
Ответ на: комментарий от Aswed

s-expr-ы (как есть) описываются простющщей праволинейной грамматикой:

S -> T | (NA
T -> 0..9 | 'N
N -> + | - | * | / | a..z
A -> SA | )

Эта, правда, совсем игрушечная, но суть ясна.

yoghurt ★★★★★
()
Ответ на: комментарий от dmitry_vk

А ЯП не является формальным языком? В чем отличие?

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

phill
()
30 июня 2014 г.

Нет, не является. Вот пример зависимости от контекста:

А = 15; // знак '=' обозначает присвоение

if A = 15 then // знак '=' обозначает сравнение

biorhitm
()
Ответ на: комментарий от dmitry_vk

Пример контекстной зависимости в js

Такая «контекстная зависимость» бывает в подавляющем большинстве языков :)

KRoN73 ★★★★★
()
Ответ на: комментарий от dmitry_vk

Пример контекстной зависимости в js:

В этом примере нету контекстной зависимости.

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

Это и в контекстно-свободных языках вполне бывает. Пример - begin/end в паскале, которые, в зависимости от контекста, могут значить начало/конец _разных_ блоков. Но синтаксис паскаля, совершенно очевидно, контекстно-свободен.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.