1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
// Copyright (C) 1994 The New York Group Theory Cooperative
// See magnus/doc/COPYRIGHT for the full notice.
// Contents: test-Diff.
//
// Principal Author: Sarah Rees
//
// Status: in progress
//
// Revision History:
//
#include "RKBPackage.h"
#include "DiffMachine.h"
#include "FPGroup.h"
#include "Set.h"
#include "Word.h"
//This runs the rkbp for a bit on a given group and builds the associated
//difference machine,and prints it out.
// The input is simply a presentation.
main()
{
do {
FPGroup G;
cin >> G;
if (G.numberOfGenerators()==0) break;
cout << G << endl;
VectorOf<int> order;
VectorOf<int> weight;
char ch;
while (((ch = cin.peek()) != EOF) && isspace(ch)) ch = cin.get();
if (ch == '[') {
ch = cin.get();
do {
int i;
cin >> i;
order.append(i);
cin>> ch;
if (ch==']') break;
else if (ch!=','){ cerr << "Unexpected input, aborted"<<endl; exit(1);}
} while (ch==',');
while (((ch = cin.peek()) != EOF) && isspace(ch)) ch = cin.get();
if (ch == '[') {
ch = cin.get();
do {
int i;
cin >> i;
weight.append(i);
cin>> ch;
if (ch==']') break;
else if (ch!=','){ cerr << "Unexpected input, aborted"<<endl; exit(1);}
} while (ch==',');
}
}
WordOrder word_order("WtLex",order,weight);
DiffMachine D;
D.readFrom();
D.printOn(cout);
while (0!=1){
Chars errmesg;
cout << "Enter word to be reduced (terminated with a comma)." << endl;
Word u = G.readWord(cin, errmesg);
Word v = u;
G.printWord(cout, u);
if (u.length()==0) { cout << endl; break;}
cout << " rewrites as ";
D.rewrite(u,word_order);
G.printWord(cout, u);
cout << endl;
}
} while (0!=1);
}
|