summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <syn@sceen.net>2006-05-20 11:44:52 +0000
committerRichard Braun <syn@sceen.net>2006-05-20 11:44:52 +0000
commit737f5fb3afc62cd95d55f0ee628032b5c95d3164 (patch)
treeed3caf4c58e06e9a46833416488c3d0c5b051c2b
parentcbad3878978fc5971c8bef3f013a8eec52693b1d (diff)
Implementation of lexical analysis outside of parse().
-rw-r--r--mtxlanguage.cc48
-rw-r--r--mtxlanguage.h4
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[];