programming language
Révision | 3712d467a9f05c0587450b39188c49ccd8f10b88 (tree) |
---|---|
l'heure | 2023-02-22 23:41:24 |
Auteur | dhrname <dhrname@joes...> |
Commiter | dhrname |
Modify the MetaPhrase class
@@ -1240,11 +1240,13 @@ namespace jstr | ||
1240 | 1240 | class MetaPhrase: public Phrase |
1241 | 1241 | { |
1242 | 1242 | private: |
1243 | - std::unordered_set<int64_t> firstSet; | |
1244 | - std::unordered_set<int64_t> followSet; | |
1243 | + std::unordered_set<int32_t> firstSet; | |
1244 | + std::unordered_set<int32_t> followSet; | |
1245 | 1245 | |
1246 | 1246 | public: |
1247 | 1247 | MetaPhrase() |
1248 | + : firstSet{}, | |
1249 | + followSet{} | |
1248 | 1250 | {} |
1249 | 1251 | |
1250 | 1252 | virtual ~MetaPhrase() |
@@ -1255,11 +1257,11 @@ namespace jstr | ||
1255 | 1257 | |
1256 | 1258 | /*getFirstSet メンバ関数 |
1257 | 1259 | * BNF定義を元にFIRST集合を求める*/ |
1258 | - void getFirstSet(); | |
1260 | + virtual std::unordered_set<int32_t>& getFirstSet(); | |
1259 | 1261 | |
1260 | 1262 | /*getFollowSet メンバ関数 |
1261 | 1263 | * BNF定義を元にFOLLOW集合を求める*/ |
1262 | - void getFollowSet(); | |
1264 | + virtual std::unordered_set<int32_t>& getFollowSet(); | |
1263 | 1265 | }; |
1264 | 1266 | |
1265 | 1267 | /*Arrow クラス |
@@ -425,7 +425,13 @@ int main(int argc, char **argv) | ||
425 | 425 | EXPECT(metaphr->nameSpace, ""); |
426 | 426 | metaphr->setSemanticValue("wpe"); |
427 | 427 | EXPECT(metaphr->value, "wpe"); |
428 | + EXPECT(metaphr->getFirstSet().empty(), true); | |
429 | + EXPECT(metaphr->getFollowSet().empty(), true); | |
430 | + metaphr->setTokenId((int32_t)jstr::parser::nonterminal::modules_statement); | |
431 | + std::unordered_set<int32_t> firstset = metaphr->getFirstSet(); | |
432 | + EXPECT(firstset.contains((int32_t)jstr::parser::token::CLASS), true); | |
428 | 433 | delete metaphr; |
434 | + | |
429 | 435 | jstr::Arrow* arrowphr = new jstr::Arrow("a"); |
430 | 436 | EXPECT(arrowphr->getId(), "a"); |
431 | 437 | EXPECT(arrowphr->getDomain(), "#empty"); |