История изменений
Исправление X512, (текущая версия) :
А если искать надо сразу несколько лексем, выставлять флаги при нахождении, а при некоторых лексемах прерывать поиск?
Есть подозрение, что вы что-то делаете не так. Для начала надо написать грамматику синтаксиса, который собираетесь парсить и всё станет яснее.
В данном случае похоже, что надо искать только лексему окончания, а флаги ставить внутри цикла.
PROCEDURE Syntax (VAR flags: SET);
BEGIN
WHILE (S.tok # S.nilTok) & (S.tok # S.semicolonTok) DO
CASE S.tok OF
| S.aTok: S.Get; INCL(flags, 0);
| S.bTok: S.Get; INCL(flags, 1);
| S.cTok: S.Get; INCL(flags, 2);
ELSE S.Get END;
END;
IF S.tok # S.semicolonTok THEN H.Error('";" expected') ELSE S.Get END;
END Syntax;
Исправление X512, :
А если искать надо сразу несколько лексем, выставлять флаги при нахождении, а при некоторых лексемах прерывать поиск?
Есть подозрение, что вы что-то делаете не так. Для начала надо написать грамматику синтаксиса, который собираетесь парсить и всё станет яснее.
В данном случае похоже, что надо искать только лексему окончания, а флаги ставить внутри цикла.
PROCEDURE Syntax (VAR flags: SET);
BEGIN
WHILE S.tok # S.semicolonTok DO
CASE S.tok OF
| S.aTok: S.Get; INCL(flags, 0);
| S.bTok: S.Get; INCL(flags, 1);
| S.cTok: S.Get; INCL(flags, 2);
ELSE S.Get END;
END;
IF S.tok # S.semicolonTok THEN H.Error('";" expected') ELSE S.Get END;
END Syntax;
Исправление X512, :
А если искать надо сразу несколько лексем, выставлять флаги при нахождении, а при некоторых лексемах прерывать поиск?
Есть подозрение, что вы что-то делаете не так. Для начала надо написать грамматику синтаксиса, который собираетесь парсить и всё станет яснее.
В данном случае похоже, что надо искать только лексему окончания, а флаги ставить внутри цикла.
Исходная версия X512, :
А если искать надо сразу несколько лексем, выставлять флаги при нахождении, а при некоторых лексемах прерывать поиск?
Есть подозрение, что вы что-то делаете не так. Для начала надо написать грамматику синтаксиса, который собираетесь парсить и всё станет яснее.