Mercurial > ~dholland > hg > ag > index.cgi
diff anagram/agcore/mrule.h @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/anagram/agcore/mrule.h Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,38 @@ +/* + * AnaGram, A System for Syntax Directed Programming + * Copyright 1993-2002 Parsifal Software. All Rights Reserved. + * See the file COPYING for license and usage terms. + * + * mrule.h - marked rules + */ + +#ifndef MRULE_H +#define MRULE_H + +#include "rule.h" + +class MarkedRule { +public: + Rule rule; + int index; + + MarkedRule() : rule(0), index(0) {} + MarkedRule(const Rule &r, int x) : rule(r), index(x) {} + MarkedRule(const Rule &r) : rule(r), index(r->length()) {} + + int operator < (const MarkedRule &r) const { + if ((int) rule < (int) r.rule) return 1; + if ((int) r.rule < (int) rule) return 0; + return index < r.index; + } + + Token leftToken() { return rule.token(index - 1); } + Token rightToken() { return rule.token(index); } + int positionLeft() { return index == 0; } + int positionRight() { return (unsigned) index == rule->length(); } + MarkedRule nextLeft() { return MarkedRule(rule, index - 1); } + MarkedRule nextRight() { return MarkedRule(rule, index + 1); } +}; + + +#endif /* MRULE_H */