diff options
author | Richard Braun <syn@sceen.net> | 2006-05-20 11:44:52 +0000 |
---|---|---|
committer | Richard Braun <syn@sceen.net> | 2006-05-20 11:44:52 +0000 |
commit | 737f5fb3afc62cd95d55f0ee628032b5c95d3164 (patch) | |
tree | ed3caf4c58e06e9a46833416488c3d0c5b051c2b | |
parent | cbad3878978fc5971c8bef3f013a8eec52693b1d (diff) |
Implementation of lexical analysis outside of parse().
-rw-r--r-- | mtxlanguage.cc | 48 | ||||
-rw-r--r-- | mtxlanguage.h | 4 |
2 files changed, 41 insertions, 11 deletions
diff --git a/mtxlanguage.cc b/mtxlanguage.cc index bc4804c..0188fd4 100644 --- a/mtxlanguage.cc +++ b/mtxlanguage.cc @@ -43,7 +43,7 @@ MtxLanguage::MtxLanguage() } size_t -MtxLanguage::find_group(char c) const +MtxLanguage::findGroup(char c) const { char *ptr; size_t i; @@ -60,12 +60,11 @@ MtxLanguage::find_group(char c) const return i; } -vector<MtxSymbol> -MtxLanguage::parse(const string &expression) +vector<string> +MtxLanguage::parseLexicalElements(const string &expression) const { size_t i, str_length, prev_group, group; vector<string> lexical_elements; - vector<MtxSymbol> results; string lexical_element; bool prev_set; char c; @@ -79,7 +78,7 @@ MtxLanguage::parse(const string &expression) if (!isspace(c)) { - group = find_group(c); + group = findGroup(c); if (!prev_set || prev_group == group) lexical_element += c; @@ -112,10 +111,39 @@ MtxLanguage::parse(const string &expression) lexical_element = ""; } - MtxRational tmp; - MtxSymbol result; - tmp = 1.2; - result = MtxSymbol("ans", tmp); - results.push_back(result); + return lexical_elements; +} + +vector<MtxSymbol> +MtxLanguage::parse(const string &expression) +{ + vector<string> lexical_elements; + vector<MtxSymbol> results; + + lexical_elements = parseLexicalElements(expression); + + { + vector<string>::iterator iterator; + + for (iterator = lexical_elements.begin(); + iterator != lexical_elements.end(); + iterator++) + cout << "DEBUG: '" << *iterator << "'" << endl; + } + + { + MtxInteger integer = 321; + MtxRational rational = 1.23; + MtxRational array[] = {MtxRational(54.254), MtxRational(84.36), MtxRational(46.23), MtxRational(-89.15)}; + MtxMatrix matrix(array, 2, 2); + MtxSymbol result; + result = MtxSymbol("ans", integer); + results.push_back(result); + result = MtxSymbol("ans", rational); + results.push_back(result); + result = MtxSymbol("ans", matrix); + results.push_back(result); + } + return results; } diff --git a/mtxlanguage.h b/mtxlanguage.h index b9953ed..7436fcb 100644 --- a/mtxlanguage.h +++ b/mtxlanguage.h @@ -30,7 +30,9 @@ class MtxLanguage { private: - size_t find_group(char c) const; + size_t findGroup(char c) const; + std::vector<std::string> + parseLexicalElements(const std::string &expression) const; static char *lexical_groups[]; |