Здравствуйте, Павел Кузнецов, Вы писали:
>> И главная трудность состоит в том, что без знания типа объекта, представленного в тексте программы именем G, мы не можем правильно провести интерпретацию данного фрагмента. Если тип G это имя некоторого объекта, то понятно, что G < A это операция меньше, примененная к двум объектам с именами G и A. Если же, G это имя параметрического типа, то к нему, очевидно, такую операцию применить нельзя.
ПК>Это подход, принятый в C++. Более сложный для анализа компилятором, и, действительно, не поддающийся описанию контекстно-свободной грамматикой, т.к. как минимум не проще задания грамматикой предварительного объявления переменных, что сводит задачу к классике.
Если я правильно понимаю ситуацию, то эта проблема решается встраиванием name lookup непосредственно в LR(1) парсер, т.е. парсер, вытащив очередной токен-идентификатор, должен запустить процедуру name lookup для нахождения определения идентификатора (отсюда растет корнями невозможность отказаться в С++ от принципа предварительного объявления как это сделано в С#) и определения его рода (т.е. это имя типа, переменной или шаблона). После чего происходит доквалификация идентификатора до идентификатора одного из этих типов, что позволяет разрешить неоднозначность.
... << RSDN@Home 1.1.0 stable >>