Ошибки из-за pragma indent
От: Аноним  
Дата: 11.09.12 09:11
Оценка:
У меня вопрос о правильности функционирования #pragma indent
#pragma indent
...
module Main
        public rulesAplayer(Source:string, Rules:string):TRulesAplayerResult
            def LexedSource = SourceLexer().Parse(Source);
            def ParsedRules = RulesParser().Parse(Rules);
            def listRuleTokenWithNamedLinkToListString(RuleToken)
            {
                RuleToken.Filter(ruleSourceTokens => ruleSourceTokens.RuleTokenValue is TRuleTokenValue.NamedLink)
                .Map(token => token.RuleTokenValue.getNameOrValue())
            }
            def isRulesSourcePartHaveDublicatesOfNamedLinks(Rules)
                !Rules.ToArray().ForAll((ruleSource, _) => 
                    listRuleTokenWithNamedLinkToListString(ruleSource)
                    .Group(String.Compare)
                    .ToArray().ForAll(groupedEqualTokens => List(groupedEqualTokens).Count==1)
                );
            def isRulesDestinationPartHaveUnknowenOfNamedLinks(Rules)
                !Rules.ToArray().ForAll( (ruleSource, ruleDestination) => 
                {
                    def correctIdentificators = listRuleTokenWithNamedLinkToListString(ruleSource);
                    def DestinationPartOfRule=listRuleTokenWithNamedLinkToListString(ruleDestination);
                    DestinationPartOfRule.ForAll(correctIdentificators.Contains)
                });
            if(LexedSource.IsNone)
                TRulesAplayerResult.Error("Cant lex source text.")
            else
                if(ParsedRules.IsNone)
                    TRulesAplayerResult.Error("Cant parse rules.")
                else
...

Если вы заметите, то осталось несколько {} и убрать их не получается не потеряв в читабельности. А если просто убрать, то ошибки компиляции вылазят. В чем причины и как бороться с этим?
И самое главное: Какие правила? В каких случаях нужно ставить {}, а в каких нет? Мне эти правила не кажутся очевидными и закономерными. Я их просто не могу вывести. Как будто это сам господин рандом пожелал, что ставить скобки нужно именно здесь для успешной компиляции.
Не говоря уже о неудобстве работы с PegGrammar, тк, насколько я понял, в режиме prgama indent атрибут должен быть записан в одну строчку в той же строчке, что и class. Ок, на самом деле это не проблема, а достаточно без prgama indent вынести в отдельный файл парсер. Может это не всегда удобно, но не вызывает больших проблем. А вот в случае с не очевидными правилами расстановки {} — это превращается в проблему. Впрочем причины этого я понимаю. #pragma indent прикручена в язык сбоку.
Собственно, ещё раз вопрос: Каковы правила расстановки {} в режиме #pragma indent?


11.09.12 15:56: Ветка выделена из темы Ошибки из-за pragma indent
Автор: Meldor
Дата: 05.09.12
— VladD2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.