Skip to content

Commit

Permalink
Progress on #22. Everything done but adjective comparison i.e. compar…
Browse files Browse the repository at this point in the history
…ative and superlative.
  • Loading branch information
oggy22 committed Apr 28, 2016
1 parent 12e6c46 commit ee76c5c
Show file tree
Hide file tree
Showing 8 changed files with 124 additions and 9 deletions.
9 changes: 7 additions & 2 deletions TestTranslatorCpp/serbian_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ namespace TranslatorTest
for (attr_t a1 : set1)
for (attr_t a2 : set2)
for (attr_t a3 : set3)
Assert::IsTrue(word(a1, a2/*, a3*/),
Assert::IsTrue(word(a1, a2, a3),
(word.word + std::wstring(L"Missing wordform 3 attrs")).c_str());
}

Expand Down Expand Up @@ -111,7 +111,7 @@ namespace TranslatorTest
{
if (word.wordtype == Serbian::word_type::придев)
{
Assert::AreEqual<size_t>(3 * 2 * 7, word.words.size(), (word.word + L" doesn't have 42 forms").c_str());
//Assert::AreEqual<size_t>(3 * 2 * 7, word.words.size(), (word.word + L" doesn't have 42 forms").c_str());
test_word_forms(word,
{ attr_t::мушки, attr_t::женски, attr_t::средњи },
{ attr_t::једнина, attr_t::множина },
Expand Down Expand Up @@ -158,6 +158,11 @@ namespace TranslatorTest
CHECK(L"хоћемо", L"хтети", attr_t::множина, attr_t::лице1);
}

TEST_METHOD(check_some_adjective_forms)
{
CHECK(L"лошег", L"лош", attr_t::мушки, attr_t::једнина, attr_t::генитив);
}

TEST_METHOD(serbian_grammar_rules)
{
test(L"ја гледам");
Expand Down
11 changes: 9 additions & 2 deletions TranslatorCpp/Languages/Serbian.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,11 @@ struct Serbian : public SERBIAN_BASE
мушки, женски, средњи,
позитив, компаратив, суперлатив,
живо,
дужи_облик,

//not real attributes as they are used for basis
презентска_основа, перфектна_основа,
основа_множине
основа_множине, основа_позитива
};

using wt = word_type;
Expand Down Expand Up @@ -67,16 +68,22 @@ struct Serbian : public SERBIAN_BASE
#define суп attrs::суперлатив

#define жив attrs::живо
#define д_о attrs::дужи_облик

#define презосн attrs::презентска_основа
#define перфосн attrs::перфектна_основа
#define оснмнож attrs::основа_множине
#define оснпоз attrs::основа_позитива

static const map<attrs, cats> belongs_to_category;

static bool is_phony_attribute(attributes a)
{
return a == оснмнож || a == перфосн || a == презосн;
return a == оснмнож
|| a == перфосн
|| a == презосн
|| a == оснмнож
|| a == оснпоз;
}

Serbian() : SERBIAN_BASE() {}
Expand Down
14 changes: 11 additions & 3 deletions TranslatorCpp/Languages/Serbian_word_rules.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,16 @@
{ L"*ст", L"*стима", имен,{ множ, дат } },
{ L"*ст", L"*сти", имен,{ множ, акуз } },
{ L"*ст", L"*сти", имен,{ множ, инстр } },

#pragma endregion

{ L"*", L"*", прил, { поз } },
{ L"*", L"нај*",прил, { суп }, комп },
{ L"*", L"*", прил,{ поз } },
{ L"*", L"нај*",прил,{ суп }, комп },
{ L"*о", L"*ије", прил,{ комп } }, //касно, рано

#pragma region Придеви:
#include "Serbian_word_rules_adjectives.h"
{ L"*", L"*", прид,{ оснпоз } }, //леп, глуп, лош
{ L"*ак", L"*к", прид,{ оснпоз } }, //кратак,дугачак
{ L"*ан", L"*н", прид,{ оснпоз } }, //паметан
{ L"*ар", L"*р", прид,{ оснпоз } }, //добар
#pragma endregion
59 changes: 59 additions & 0 deletions TranslatorCpp/Languages/Serbian_word_rules_adjectives.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#pragma region Мушки:
{ L"*", L"*и", прид, { муш, једн, ном }, оснпоз },
{ L"*", L"*ог", прид,{ муш, једн, ген }, оснпоз },
{ L"*", L"*ога", прид,{ муш, једн, ген, д_о }, оснпоз },
{ L"*", L"*ом", прид,{ муш, једн, дат }, оснпоз },
{ L"*", L"*оме", прид,{ муш, једн, дат, д_о }, оснпоз },
{ L"*", L"*", прид,{ муш, једн, акуз }, оснпоз },
{ L"*", L"*и", прид,{ муш, једн, вок }, оснпоз },
{ L"*", L"*им", прид,{ муш, једн, инстр }, оснпоз },
{ L"*", L"*ом", прид,{ муш, једн, лок }, оснпоз },
{ L"*", L"*оме", прид,{ муш, једн, лок, д_о }, оснпоз },

{ L"*", L"*и", прид,{ муш, множ, ном }, оснпоз },
{ L"*", L"*их", прид,{ муш, множ, ген }, оснпоз },
{ L"*", L"*им", прид,{ муш, множ, дат }, оснпоз },
{ L"*", L"*е", прид,{ муш, множ, акуз }, оснпоз },
{ L"*", L"*и", прид,{ муш, множ, вок }, оснпоз },
{ L"*", L"*им", прид,{ муш, множ, инстр }, оснпоз },
{ L"*", L"*им", прид,{ муш, множ, лок }, оснпоз },
#pragma endregion

#pragma region Женски:
{ L"*", L"*а", прид,{ жен, једн, ном }, оснпоз },
{ L"*", L"*е", прид,{ жен, једн, ген }, оснпоз },
{ L"*", L"*ој", прид,{ жен, једн, дат }, оснпоз },
{ L"*", L"*у", прид,{ жен, једн, акуз }, оснпоз },
{ L"*", L"*а", прид,{ жен, једн, вок }, оснпоз },
{ L"*", L"*ом", прид,{ жен, једн, инстр }, оснпоз },
{ L"*", L"*ој", прид,{ жен, једн, лок }, оснпоз },

{ L"*", L"*е", прид,{ жен, множ, ном }, оснпоз },
{ L"*", L"*их", прид,{ жен, множ, ген }, оснпоз },
{ L"*", L"*им", прид,{ жен, множ, дат }, оснпоз },
{ L"*", L"*е", прид,{ жен, множ, акуз }, оснпоз },
{ L"*", L"*е", прид,{ жен, множ, вок }, оснпоз },
{ L"*", L"*им", прид,{ жен, множ, инстр }, оснпоз },
{ L"*", L"*им", прид,{ жен, множ, лок }, оснпоз },
#pragma endregion

#pragma region Средњи:
{ L"*", L"*о", прид,{ сред, једн, ном }, оснпоз },
{ L"*", L"*ог", прид,{ сред, једн, ген }, оснпоз },
{ L"*", L"*ога", прид,{ сред, једн, ген, д_о }, оснпоз },
{ L"*", L"*ом", прид,{ сред, једн, дат }, оснпоз },
{ L"*", L"*оме", прид,{ сред, једн, дат, д_о }, оснпоз },
{ L"*", L"*о", прид,{ сред, једн, акуз }, оснпоз },
{ L"*", L"*о", прид,{ сред, једн, вок }, оснпоз },
{ L"*", L"*им", прид,{ сред, једн, инстр }, оснпоз },
{ L"*", L"*ом", прид,{ сред, једн, лок }, оснпоз },
{ L"*", L"*оме", прид,{ сред, једн, лок, д_о }, оснпоз },

{ L"*", L"*и", прид,{ сред, множ, ном }, оснпоз },
{ L"*", L"*их", прид,{ сред, множ, ген }, оснпоз },
{ L"*", L"*им", прид,{ сред, множ, дат }, оснпоз },
{ L"*", L"*е", прид,{ сред, множ, акуз }, оснпоз },
{ L"*", L"*и", прид,{ сред, множ, вок }, оснпоз },
{ L"*", L"*има", прид,{ сред, множ, инстр }, оснпоз },
{ L"*", L"*има", прид,{ сред, множ, лок }, оснпоз },
#pragma endregion
24 changes: 22 additions & 2 deletions TranslatorCpp/Languages/Serbian_words.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,31 @@
{ L"школа", имен, { жен } },

// Придеви:
{ L"брз", прид },
{ L"велики", прид },
{ L"глуп", прид },
{ L"добар", прид },
{ L"дуг", прид },
{ L"дугачак", прид },
{ L"јак", прид },
{ L"јефтин", прид },
{ L"кратак", прид },
{ L"леп", прид },
{ L"лош", прид },
{ L"мали", прид },
{ L"млад", прид },
{ L"паметан", прид },
{ L"плав", прид },
{ L"празан", прид },
{ L"пун", прид },
{ L"ружан", прид },
{ L"скуп", прид },
{ L"слаб", прид },

// Прилози:
{ L"брзо", прил,{}, { { L"брже", {комп} } } },
{ L"добро",прил,{}, { { L"боље", {комп} } } },
{ L"лепо", прил,{}, { { L"лепше", {комп} } } },
{ L"далеко",прил,{},{ { L"даље",{ комп } } } },
{ L"добро",прил,{},{ { L"боље",{ комп } } } },
{ L"касно", прил,{} },
{ L"лепо", прил,{},{ { L"лепше",{ комп } } } },
{ L"рано", прил,{} },
1 change: 1 addition & 0 deletions TranslatorCpp/TranslatorCpp.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@
<ClInclude Include="Languages\Serbian.h" />
<ClInclude Include="Languages\Serbian_word_rules.h" />
<ClInclude Include="Languages\Serbian_words.h" />
<ClInclude Include="Languages\Serbian_word_rules_adjectives.h" />
<ClInclude Include="parsing_triangle.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
Expand Down
3 changes: 3 additions & 0 deletions TranslatorCpp/TranslatorCpp.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@
<ClInclude Include="Languages\Serbian_word_rules.h">
<Filter>Languages</Filter>
</ClInclude>
<ClInclude Include="Languages\Serbian_word_rules_adjectives.h">
<Filter>Languages</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="Languages">
Expand Down
12 changes: 12 additions & 0 deletions TranslatorCpp/language.h
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,18 @@ namespace translator
return false;
}

/// <summary>Checks if a word form with the given attributes exists</summary>
bool operator()(attr_t a1, attr_t a2, attr_t a3) const
{
for (const auto& w : words)
if (w.attrs.size() == 3
&& w.attrs.find(a1) != w.attrs.end()
&& w.attrs.find(a2) != w.attrs.end()
&& w.attrs.find(a3) != w.attrs.end())
return true;
return false;
}

const word_form<Language>& operator[](attr_t a) const
{
for (const auto& w : words)
Expand Down

0 comments on commit ee76c5c

Please sign in to comment.