Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Bitwise Operations for Template Toolkit

by rob_au (Abbot)
on Dec 01, 2002 at 09:33 UTC ( #216745=sourcecode: print w/replies, xml ) Need Help??
Category: Text Processing
Author/Contact Info rob_au
Description: The following two patches can be used to add bitwise AND and XOR operators for use in Template Toolkit templates using the & and ^ tokens respectively. These patches are to be applied to the parser/Grammar.pm.skel and parser/Parser.yp files in the Template Toolkit source. Following the application of these patches, the parser/yc script will need to be run to merge these changes into the installation files - When doing this, expect an inconsequential shift/reduce conflict and reduce/reduce conflict.

Bitwise OR and NOT operations have not also been incorporated as the corresponding tokens, | and ! respectively, have already been assigned roles within the Template Toolkit grammar.

Alternatively a complete patch for Template Toolkit can be found here for application on the version 2.08 Template Toolkit source.

diff -Naur Template-Toolkit-2.08/parser/Grammar.pm.skel Template-Toolk
+it-2.08-bitop/parser/Grammar.pm.skel
--- Template-Toolkit-2.08/parser/Grammar.pm.skel        Fri Jun  7 19:
+29:08 2002
+++ Template-Toolkit-2.08-bitop/parser/Grammar.pm.skel  Wed Nov 27 21:
+36:36 2002
@@ -106,10 +106,11 @@
     my @cmpop  = keys %CMPOP;
#    my @binop  = qw( + - * % );              # '/' above, in @tokens
     my @binop  = qw( - * % );              # '+' and '/' above, in @t
+okens
+    my @bitop = qw( & ^ );

     # fill lexer table, slice by slice, with reserved words and opera
+tors
-    @$LEXTABLE{ @RESERVED, @cmpop, @binop, @tokens }
-       = ( @RESERVED, ('CMPOP') x @cmpop, ('BINOP') x @binop, @tokens
+ );
+    @$LEXTABLE{ @RESERVED, @cmpop, @binop, @bitop, @tokens }
+       = ( @RESERVED, ('CMPOP') x @cmpop, ('BINOP') x @binop, ('BITOP
+') x @bitop, @tokens );
 }

diff -Naur Template-Toolkit-2.08/parser/Parser.yp Template-Toolkit-2.0
+8-bitop/parser/Parser.yp
--- Template-Toolkit-2.08/parser/Parser.yp      Fri Jul 19 23:22:57 20
+02
+++ Template-Toolkit-2.08-bitop/parser/Parser.yp        Wed Nov 27 21:
+34:19 2002
@@ -50,6 +50,7 @@
 %left DOT
 %left CMPOP
 %left BINOP
+%left BITOP
 %left '+'
 %left '/'
 %left DIV
@@ -358,6 +359,7 @@
 ;

 expr:      expr BINOP expr         { "$_[1] $_[2] $_[3]"             
+    }
+        |   expr BITOP expr         { "$_[1] $_[2] $_[3]"            
+     }
        |   expr '/' expr           { "$_[1] $_[2] $_[3]"             
+    }
        |   expr '+' expr           { "$_[1] $_[2] $_[3]"             
+    }
        |   expr DIV expr           { "int($_[1] / $_[3])"            
+    }

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://216745]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (2)
As of 2020-10-21 01:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favourite web site is:












    Results (212 votes). Check out past polls.

    Notices?