Size: a a a

Compiler Development

2021 January 28

JT

James Tevision in Compiler Development
Но как результат она и 1000 слоев выдержит
источник

AT

Alexander Tchitchigi... in Compiler Development
James Tevision
Вообще эта структура не столько
Для 1000 слоев вложености
Сколько для частого
Создания и удаления слоев
Аля
{
    {}
    {}
    {}
}
Связный список с переиспользованием памяти (узлов). 🤷‍♀️
источник

AK

Andrei Kurosh in Compiler Development
Danya
А можно пример?
Насколько я знаю, в языках семейства ML это разрешено и называется variable shadowing
источник

AK

Andrei Kurosh in Compiler Development
А вот в си-подобных языках, наоборот, приводит к ошибке компиляции
источник

D

Danya in Compiler Development
Andrei Kurosh
Насколько я знаю, в языках семейства ML это разрешено и называется variable shadowing
А как оно сосуществует со вторым способом?
источник

JT

James Tevision in Compiler Development
В пределах одного языка это нереально вроде
источник

JT

James Tevision in Compiler Development
Разве что использовать "затенение" но сыпать варнинг
источник

D

Danya in Compiler Development
Видимо я неправильно понял сообщение
источник

AT

Alexander Tchitchigi... in Compiler Development
Danya
Видимо я неправильно понял сообщение
Я тоже так понял. 😅
источник

D

Danya in Compiler Development
Andrei Kurosh
Насколько я знаю, в языках семейства ML это разрешено и называется variable shadowing
Ну в С/С++ тоже есть variable shadowing
источник

AT

Alexander Tchitchigi... in Compiler Development
James Tevision
В пределах одного языка это нереально вроде
Затенять идентификаторы с тем же типом, но ругаться на смену типа? В C что-то такое есть... 🤦‍♀️
источник

D

Danya in Compiler Development
Alexander Tchitchigin
Затенять идентификаторы с тем же типом, но ругаться на смену типа? В C что-то такое есть... 🤦‍♀️
Только что проверил — нету
$ clang vars.cpp
$ cat vars.cpp
int main()
{
       char a;
       {
               int a;
       }
}
источник

AK

Andrei Kurosh in Compiler Development
В сишарпе запрещено переопределять переменные, даже аргументы лямбд не могут совпадать с локальными переменными
источник

D

Danya in Compiler Development
Ну в СиШарпе да
источник

AT

Alexander Tchitchigi... in Compiler Development
Danya
Только что проверил — нету
$ clang vars.cpp
$ cat vars.cpp
int main()
{
       char a;
       {
               int a;
       }
}
Не для переменных. То ли для структур, то ли для функций — не помню.
источник

а

а это кто in Compiler Development
James Tevision
Кстати, как правильней поступать при повторном объявлении
Аля
{
     char a;
     {
           int a;
          /* try to access a */
      }
}
Ругаться и не компилить,
или использовать объявление с меньшей областью видимости?

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

RG

R G in Compiler Development
здравствуйте. Не подскажете как лучше делать: сначала выполнять полностью лексический анализ и только потом синтаксический, или сразу парсить, по ходу дела вызывая функции лексера который вычитывает из файла очередную лексему?
источник

AT

Alexander Tchitchigi... in Compiler Development
R G
здравствуйте. Не подскажете как лучше делать: сначала выполнять полностью лексический анализ и только потом синтаксический, или сразу парсить, по ходу дела вызывая функции лексера который вычитывает из файла очередную лексему?
Ну, "взрослые" сгенерированные лексеры-парсеры работают "лениво", вычитывая и обрабатывая символы из файла по мере необходимости, но если Вы всё хотите руками написать, то проще будет читать всё скопом и обрабатывать на каждой стадии полностью. А иначе Вы бы и не спрашивали.
источник

RG

R G in Compiler Development
Alexander Tchitchigin
Ну, "взрослые" сгенерированные лексеры-парсеры работают "лениво", вычитывая и обрабатывая символы из файла по мере необходимости, но если Вы всё хотите руками написать, то проще будет читать всё скопом и обрабатывать на каждой стадии полностью. А иначе Вы бы и не спрашивали.
понял, спасибо
источник

YS

Yaroslav Schekin in Compiler Development
R G
здравствуйте. Не подскажете как лучше делать: сначала выполнять полностью лексический анализ и только потом синтаксический, или сразу парсить, по ходу дела вызывая функции лексера который вычитывает из файла очередную лексему?
Обычно используется второй подход.
Бывает даже наоборот, кстати (но намного реже) — лексер вызывает функцию-парсер по мере считывания токенов.
источник