LINUX.ORG.RU

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

 , ,


0

1

В BlackBoxComponentBuilder это написано так (почти все комментарии - мои)

  (* object modes *)
  (** Скорее всего, это надо понимать как 
     "класс данного именованного идентификатора" в тексте, 
     или "класс сущности, обозначаемой идентификатором"
     Назовём «части речи» или «чр» "чр" ПОНЯТИЕ(чр) *)
  Var(*чр параметр по значению*) = 1 (* Параметр без ключевого слово. Дальше неясно: Переменная? *);
  VarPar(*чр параметр по ссылке*) = 2 (* Var, In, Out параметр *); 
  Con = 3 (* ? Объявление константы или имя объявленной константы *);
  Fld = 4 (* ? Поле записи *); 
  Typ = 5 (* Определение типа *); 
  LProc = 6 (* Определение процедуры (не метода) *); 
  XProc = 7 (* ? Экспортируемая процедура *);
  SProc = 8 (* Системная процедура, созданная с помощью НяФс.EnterProc *); 
  CProc = 9 (* Процедура, заданная в машинном коде, см. НяМ.CProcFlag *);
  IProc = 10 (* Обработчики прерываний *); 
  Mod(*чр модуль*) = 11 (* Модуль *); 
  (* Head = 12;  - не используется в этом файле *)
  TProc(*чр метод*) = 13 (* Метод? *); 
  Attr(*чр атрибут*) = 20 (* Атрибут, например, ABSTRACT, LIMITED, EMPTY, EXTENSIBLE *);

Не класс, не тип, не часть речи, не член предложение. Есть ли какое-то официальное название?

★★★★★

Ответ на: комментарий от vladimirmir2016

Нет, я не про то, что это перечисление. А про то, как назвать это перечисление. Вот в русском языке есть, допустим, существительные и глаголы. Мама мыла раму. И есть подлежащее и сказуемое - другая категория.

А как назвать категории слов StdLog и String в StdLog.String(foo). StdLog - имя модуля, String - имя функции, foo - имя переменной. Всё вместе как это называется в программировании? Не части же речи?

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

А если как называются StdLog, String и foo по отдельности - то зависит от уровня абстракции с которого ты на них смотришь. Это либо опять же выражения (потому что они что-то да возвращают), либо Идентификаторы, если ты смотришь с точки зрения токенизатора\парсера\анализатора.

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

Идентификаторы они в лексере. А выражения они - нет, они не выражения. StdLog и String по отдельности - это ошибка разбора. Выражение из них - это только foo. Попробую ещё по-другому объяснить вопрос. Компилятор прочитал foo Как компилятор узнаёт, что foo - это переменная, а не функция? Он ищет слово «foo» в таблице символов (которую он сам же и построил, но речь не о том). В таблице есть запись для foo и есть поле, в котором записано, что foo - это переменная, или что это функция. Как должно называться это поле?

Или может быть какая-то иерархия классов. Записи для функций изображаются одним классом, записи для переменных - другим. Как назвать общий базовый класс всех этих классов?

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

Потому что тип - понятие слишком многозначное и неспецифично. Например, есть тип выражения (в смысле системы типов языка). И он есть у переменной.

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

Нда, похоже я не осилил сформулировать вопрос, потому что меня почти никто не понимает. Хорошо. Смотрим литературу. Сергей Свердлов, «Конструирование компиляторов». Пункт «Информация в таблице имён».

Для каждого имени, встретившегося в 
программе, в таблице имён будет храниться 
следующая информация:
- само имя в виде строки символов
- КАТЕГОРИЯ ИМЕНИ. Что имя обозначает: константу, переменную, тип, стандартную процедуру, модуль
В этом случае мне «часть речи» больше нравится, потому что «категория», «тип», «вид» - это абстрактные слова, которые нельзя логически привязать к обозначаемому - можно только запомнить. Вспомним биологию - там есть класс, отряд, род, вид. Смотрим теперь перевод. По английски это означает «part of speech», если я правильно понял.

Книгу Дракона погрепал, но так и не нашёл, есть ли там такой термин. В лиспе у символа есть bindings. Всё на самом деле упирается в цейтнот, как и обычно.

В конце концов, SO знает всё, и вот что там написано про терминологию в компиляции:

https://stackoverflow.com/questions/15990321/correct-compiler-terminology

Вместо того, чтобы искать «правильную» терминологию, которая в лучшем случае будет субъективной, выбери consistent (последовательную) терминологию и объясни её на ранних этапах своей работы

В общем-то, терминологическая культура мирового жандарма традиционно оказалась отсутствующей. Если у вас будут какие-то дальнейшие идеи, пишите. А так я тему закрываю и буду называть это частями речи. Если в РЯ части речи - это глагол, существительное, прилагательное, наречие, то в ЯП части речи - это ключевое слово (имя нарицательное, но может быть и глаголом, а в РЯ нет имён собственных глаголов, например, нет слова «линуксить»), имя переменной или класса (два подвида имени собственных), имя пр-ва имён (аналогов в РЯ нет), глагол.

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

den73 ★★★★★ ()

Мне кажется, это всё-таки Идентификатор.

Или, если более по-русски - Имя. В том смысле, в котором, например, линкер разрешает зависимости Имён в объектных файлах. Там, правда, по-английски говорят именно про Symbol, но это не русский «символ».

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

Вопрос не в том, как назвать сам символ. Вопрос в том, как называется классификация конкретных символов или имён по тому, обозначают ли они переменную, пр-во имён или функцию.

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

КАТЕГОРИЯ ИМЕНИ. Что имя обозначает: константу, переменную, тип, стандартную процедуру, модуль

Так ведь это ты и спрашивал.

это абстрактные слова, которые нельзя логически привязать к обозначаемому

Это касается абсолютно любого слова. Из слова «табурет» никак логически не следует, что оно обозначает предмет для сидения одного человека без спинки.

no-such-file ★★★★★ ()
Ответ на: комментарий от webmonkey

Давайте не будем дискутировать. Проблема ясна только в контексте. ХОтите контекста - вот он:

https://gitlab.com/budden/nkp/blob/master/k/Dev/Mod/CPP.kp

Вот как озаглавлены группы констант (считай - перечисления):

(* symbol-values *)
(* object modes *)
(* Structure forms *)
(* nodes classes *)

Без разъяснений (а разъяснений, в общем-то, нет), не совсем понятно, что означает каждая группа констант.

den73 ★★★★★ ()

Песец, у тебя каша в голове. Даже себе не можешь объяснить, что ты хочешь.
Судя по попыткам тебе помочь, тебе нужно так, чтобы один объект мог принадлежать нескольким множествам. Например: «я» - это одновременно и буква алфавита, и местоимение, и существительное. Это можно сделать в лоб, прописав объект во всех нужных множествах. Или завести систему тегов - у любого объекта есть список тегов, в каких можествах он есть. Например: твоя тема на лоре имеет теги (заодно и принадлежит множествам) - «коноплятор», «терморектология», " я познер мира".

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

Как всегда, ищешь не ответ на вопрос, а ответ, который тебе понравится.
Я бы предложил термин «сущность», и этот вариант выглядит разумно, потому что если задаваться вопросом «Что это есть?» применительно к чему-либо, то интересуешься именно его абстрактной сутью.

Virtuos86 ★★★★★ ()