Dziś jest sobota, 10 stycznia 2009 roku (z kalendarza...)

Kompilator coraz bliżej chwały

Icon

27.10.2005, 19:30

Projekty

Komentarze (1)

Powrót

Dzisiaj kompilator OPT zaliczył poprawnie wszystkie przyszykowane dla niego testy przetwarzania wyrażeń oraz parametrów w instrukcjach. Oznacza to, że wszystko powinno być już w warunkach bojowych interpretowane zgodnie z wymogami i nie będzie już więcej niespodzianek, że coś, co pozornie działać powinno, odmawia posłuszeństwa. Jednocześnie wpadłem na pomysł, jak przetestować sam algorytm kompilujący i zabrałem się za układanie kolejnych testów.

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

Powrót

Komentarze

Napisał normanos w piątek, 28 października 2005 o 08:29

"idzie mu, jak bułka z kromką" ?!? :)

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2009 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia