Re[27]: Вопрос о конкретных примерах
От: Nick_ Россия  
Дата: 08.10.04 15:00
Оценка:
Здравствуйте, prVovik, Вы писали:

V>Пожобная двусмысленность не может быть обработана на этаме синтаксического анализа, так как на данном этапе происходит разбор выражнния исключительно по КОНТЕКСТНО СВОБОДНОЙ грамматике. А описанная тобой двусмысленность может быть обработана контекстно зависимой грамматикой, а следовательно это может произойти только на этапе семантического анализа.


Грамматика Си — контекстно зависима. То, что Си парсится LL парсером ничего не говорит, потому что это не честный LL или LR парсер. при чтении символа лексическим анализатором проверяется, является ли этот символ типом. А синтаксический анализатор заносит новые типы определенные c gjvjom. ензувуа в таблицу типов, которой пользуется лексический анализатор.
Такая обратная связь выходит за рамки LL разбора и позволяет разобрать контекстно зависимую грамматику языка Си.
Еще раз приведу пример:

int main()
{
free(ptr); // это вызов функции или определение переменной?
}

Для вызова функции и определения переменной используются разные синтаксические конструкции.
И в данном случае, это зависит от контекста: встретилось ли ранее typedef int free;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.