|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r73566 - in trunk/libs/spirit/example/qi/compiler_tutorial: conjure3 conjure_samples
From: joel_at_[hidden]
Date: 2011-08-05 23:38:29
Author: djowel
Date: 2011-08-05 23:38:28 EDT (Fri, 05 Aug 2011)
New Revision: 73566
URL: http://svn.boost.org/trac/boost/changeset/73566
Log:
More binary operators
Text files modified:
trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/compiler.cpp | 7 ++++
trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/lexer_def.hpp | 6 ++++
trunk/libs/spirit/example/qi/compiler_tutorial/conjure_samples/operators.cnj | 58 +++++++++++++++++++++++++++++++--------
3 files changed, 59 insertions(+), 12 deletions(-)
Modified: trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/compiler.cpp
==============================================================================
--- trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/compiler.cpp (original)
+++ trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/compiler.cpp 2011-08-05 23:38:28 EDT (Fri, 05 Aug 2011)
@@ -181,6 +181,13 @@
case token_ids::minus: return builder.CreateSub(lhs, rhs, "subtmp");
case token_ids::times: return builder.CreateMul(lhs, rhs, "multmp");
case token_ids::divide: return builder.CreateSDiv(lhs, rhs, "divtmp");
+ case token_ids::mod: return builder.CreateSRem(lhs, rhs, "modtmp");
+
+ case token_ids::bit_or: return builder.CreateOr(lhs, rhs, "ortmp");
+ case token_ids::bit_xor: return builder.CreateXor(lhs, rhs, "xortmp");
+ case token_ids::bit_and: return builder.CreateAnd(lhs, rhs, "andtmp");
+ case token_ids::shift_left: return builder.CreateShl(lhs, rhs, "shltmp");
+ case token_ids::shift_right: return builder.CreateLShr(lhs, rhs, "shrtmp");
case token_ids::equal: return builder.CreateICmpEQ(lhs, rhs, "eqtmp");
case token_ids::not_equal: return builder.CreateICmpNE(lhs, rhs, "netmp");
Modified: trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/lexer_def.hpp
==============================================================================
--- trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/lexer_def.hpp (original)
+++ trunk/libs/spirit/example/qi/compiler_tutorial/conjure3/lexer_def.hpp 2011-08-05 23:38:28 EDT (Fri, 05 Aug 2011)
@@ -41,6 +41,11 @@
(">>=", token_ids::shift_right_assign)
("\\|\\|", token_ids::logical_or)
("&&", token_ids::logical_and)
+ ("\\|", token_ids::bit_or)
+ ("\\^", token_ids::bit_xor)
+ ("&", token_ids::bit_and)
+ ("<<", token_ids::shift_left)
+ (">>", token_ids::shift_right)
("==", token_ids::equal)
("!=", token_ids::not_equal)
("<", token_ids::less)
@@ -51,6 +56,7 @@
("\\-", token_ids::minus)
("\\*", token_ids::times)
("\\/", token_ids::divide)
+ ("%", token_ids::mod)
("!", token_ids::not_)
;
Modified: trunk/libs/spirit/example/qi/compiler_tutorial/conjure_samples/operators.cnj
==============================================================================
--- trunk/libs/spirit/example/qi/compiler_tutorial/conjure_samples/operators.cnj (original)
+++ trunk/libs/spirit/example/qi/compiler_tutorial/conjure_samples/operators.cnj 2011-08-05 23:38:28 EDT (Fri, 05 Aug 2011)
@@ -1,77 +1,108 @@
/* More operators tests */
/* Conjure >=3 only!!! */
-int plus(x, y)
+// assign ops
+
+int aplus(x, y)
{
int t = x;
t += y;
return t;
}
-int minus(x, y)
+int aminus(x, y)
{
int t = x;
t -= y;
return t;
}
-int shl(x, y)
+int ashl(x, y)
{
int t = x;
t <<= y;
return t;
}
-int div(x, y)
+int adiv(x, y)
{
int t = x;
t /= y;
return t;
}
-int mult(x, y)
+int amult(x, y)
{
int t = x;
t *= y;
return t;
}
-int mod(x, y)
+int amod(x, y)
{
int t = x;
t %= y;
return t;
}
-int or(x, y)
+int aor(x, y)
{
int t = x;
t |= y;
return t;
}
-int and(x, y)
+int aand(x, y)
{
int t = x;
t &= y;
return t;
}
-int xor(x, y)
+int axor(x, y)
{
int t = x;
t ^= y;
return t;
}
-int shr(x, y)
+int ashr(x, y)
{
int t = x;
t >>= y;
return t;
}
-int main()
+// binary ops
+
+int plus(x, y) { return x + y; }
+int minus(x, y) { return x - y; }
+int shl(x, y) { return x << y; }
+int div(x, y) { return x / y; }
+int mult(x, y) { return x * y; }
+int mod(x, y) { return x % y; }
+int or(x, y) { return x | y; }
+int and(x, y) { return x & y; }
+int xor(x, y) { return x ^ y; }
+int shr(x, y) { return x >> y; }
+
+int assign()
+{
+ int a = aplus(2, 3); // 5
+ int b = ashl(a, 2); // 20
+ int c = aminus(b, 2); // 18
+ int d = adiv(c, 2); // 9
+ int e = amult(d, c); // 162
+ int f = amod(e, 10); // 2
+ int g = aor(f, 45); // 47
+ int h = aand(g, 48); // 32
+ int j = axor(h, h); // 0
+ int k = aor(j, 65535); // 65535
+ int l = ashr(k, 3); // 8191
+ return l;
+}
+
+int binary()
{
int a = plus(2, 3); // 5
int b = shl(a, 2); // 20
@@ -87,4 +118,7 @@
return l;
}
-
+int main()
+{
+ return assign() ^ binary(); // 0
+}
\ No newline at end of file
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk