summaryrefslogtreecommitdiff
path: root/decuda_to_ptxplus/header.l
diff options
context:
space:
mode:
authorJimmy Kwa <[email protected]>2010-10-28 12:07:29 -0800
committerJimmy Kwa <[email protected]>2010-10-28 12:07:29 -0800
commit0586c55d7688f492d5264cb9299cf00ff73d3df7 (patch)
treeef1ecc58933398e333f16dc56915bdffc64ef422 /decuda_to_ptxplus/header.l
parent0efd3c00f5611bfa82b01d87d175122388d621cc (diff)
used p4 integrate to copy decuda_to_ptxplus into the distribtion folder. Edited baseline_ptxplus.config so the ptxplus regression runs properly.
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 7942]
Diffstat (limited to 'decuda_to_ptxplus/header.l')
-rw-r--r--decuda_to_ptxplus/header.l95
1 files changed, 95 insertions, 0 deletions
diff --git a/decuda_to_ptxplus/header.l b/decuda_to_ptxplus/header.l
new file mode 100644
index 0000000..848c189
--- /dev/null
+++ b/decuda_to_ptxplus/header.l
@@ -0,0 +1,95 @@
+%option noyywrap
+%option yylineno
+%option prefix="header_"
+%{
+#include <iostream>
+#include "headerParser.hpp"
+#include <string.h>
+
+/* not sure if this is needed*/
+#define YY_NEVER_INTERACTIVE 1
+
+void header_error(const char*);
+extern void output(const char * text);
+%}
+
+
+/*Regular expresions go here*/
+alpha [a-zA-Z]
+numeric [0-9]
+hexalpha [A-Fa-f]
+alphanum ({alpha}|{numeric})
+hexdigit ({numeric}|{hexalpha})
+whitespace [ \t]
+newline [\n]
+anycharbutnewline [^\n]
+anychar ({newline}|{anycharbutnewline})
+anycharbutrightbrace [^"}"]
+
+identifier ({alpha}({alphanum}|["_$"])*)|([_$%]({alphanum}|["_$"])+)
+hexliteral 0[xX]{hexdigit}+U?
+octliteral 0[0-7]+U?
+binliteral 0[bB][01]+U?
+decliteral ([1-9][0-9]*U?)|0U?
+
+%%
+ /*Translation rules*/
+
+ /*Compiler directives*/
+\.version return DOTVERSION;
+\.target return DOTTARGET;
+\.entry return DOTENTRY;
+
+ /*State spaces*/
+\.param return DOTPARAM;
+
+ /*operand types*/
+\.u64 return DOTU64;
+\.u32 return DOTU32;
+\.u16 return DOTU16;
+\.b32 return DOTB32;
+\.f32 return DOTF32;
+
+
+ /*identifier + literals*/
+{identifier} header_lval.string_value = strdup(yytext); return IDENTIFER;
+{decliteral} header_lval.string_value = strdup(yytext); return DECLITERAL; //change to int later?
+
+ /*braces and parenthesis*/
+\( return LEFTPAREN;
+\) return RIGHTPAREN;
+
+ /*discard newline*/
+{newline}+
+
+
+ /*discard commas and periods*/
+\,
+\.
+ /*discard whitespace*/
+{whitespace}+
+ /*discard comments*/
+"//"{anycharbutnewline}*{newline}
+
+ /*discard other header stuff*/
+\.file{anycharbutnewline}*{newline}
+\.extern{anycharbutnewline}*{newline}
+
+ /*discard kernel body*/
+\{{anycharbutrightbrace}*\}
+
+ /*reached end of file*/
+<<EOF>> return 0;
+
+ /*None of the rules matched. Throw error*/
+. header_error("Invalid token");
+
+%%
+
+void header_error(const char* message)
+{
+ output(" "); output(message); output(" near \""); output(header_text); output("\"");
+ output(" on line ");
+ char line[5]; sprintf(line, "%i", header_lineno); output(line);
+ output("\n");
+}