Cóż w tym algorytmie jest źle? W zasadzie przetwarzanie instrukcji idzie mu, jak bułka z kromką. To instrukcja podaje kompilatorowi wytyczne odnośnie tego, czy {trala} ma otwierać nowy węzeł, kończyć go, a może stanowić pojedynczą komendę bez podelementów. Sprawa się nieco komplikuje, kiedy trala nie występuje w słowniku utworzonym na podstawie danych dostarczonych z procesorów instrukcji. OPT owszem, wbudowuje ją w drzewo, ale oznacza flagą OPT_UNKNOWN. Jej znaczenie jest mniej więcej takie: "dobra, nie wiem, co to jest, ale uznałem ci to. Dalej już się nie mieszam, przetwarzaj to sobie według uznania, programisto." Oczywiście trzeba samemu rozpoznać, jak takie homo-niewiadomo ma wpływać na strukturę węzłów. Tutaj mocno wzorowałem się na XML'u i wyróżniłem cztery warianty:
- Jeśli nazwa zaczyna się od / - instrukcja kończąca węzeł.
- Jeśli nazwa kończy się na / - instrukcja pusta.
- Jeśli nazwa kończy się na "else" - alternatywa, coś takiego w XML'u nie występuje, hehe :)
- Jeśli nazwa nie pasuje do pozostałych - zacznij nowy węzeł.
Problem w tym, że obecna wersja kodu ma małe problemy z rozróżnianiem, co jest czym i czasami wychodzą z tego niesamowite bzdury. Musi to być poprawione, jeśli chcę dalej rozwijać komponenty. Używają one węzłów OPT_UNKNOWN do wprowadzania parametrów i zdarzeń.
Acha, jeszcze na koniec lista zdanych testów:
TestCase optCompilerTest->testExpressionStrings() passed TestCase optCompilerTest->testExpressionEscapedStrings() passed TestCase optCompilerTest->testExpressionRAStrings() passed TestCase optCompilerTest->testExpressionRAEscapedStrings() passed TestCase optCompilerTest->testExpressionRAEscapedStringsRA() passed TestCase optCompilerTest->testExpressionNonOperatorStrings() passed TestCase optCompilerTest->testExpressionOperatorStrings() passed TestCase optCompilerTest->testExpressionNumbers() passed TestCase optCompilerTest->testExpressionFloatNumbers() passed TestCase optCompilerTest->testExpressionHexadecimalNumbers() passed TestCase optCompilerTest->testExpressionLostBracketTest() passed TestCase optCompilerTest->testExpressionTablePHPSyntax() passed TestCase optCompilerTest->testExpressionTableAlternativeSyntax() passed TestCase optCompilerTest->testExpressionSectionSyntax() passed TestCase optCompilerTest->testParametrizeNoParamsNoMatches() passed TestCase optCompilerTest->testParametrizeNoParamsYesMatchesUnnamed() passed TestCase optCompilerTest->testParametrizeNoParamsYesMatchesNamed() passed TestCase optCompilerTest->testParametrizeYesOptionalParamsNoMatches() passed TestCase optCompilerTest->testParametrizeYesRequiredParamsNoMatches() passed TestCase optCompilerTest->testParametrizeYesRequiredParamsYesMatchesUnnamed() passed TestCase optCompilerTest->testParametrizeYesRequiredParamsYesMatchesNamed() passed TestCase optCompilerTest->testParametrizeYesRequiredAndOptionalParamsYesMatchesUnnamed() passed TestCase optCompilerTest->testParametrizeYesRequiredAndOptionalParamsYesIncompleteMatchesUnnamed() passed TestCase optCompilerTest->testParametrizeOptionalJump() passed TestCase optCompilerTest->testParametrizeOptionalJumpAtRequired() passed TestCase optCompilerTest->testCompilerSimple() passed






Napisał normanos w piątek, 28 października 2005 o 08:29
"idzie mu, jak bułka z kromką" ?!? :)