Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

new decl-rule; precedence : regexp := %{ haxe %} as a short cut for n…

…ormal token regexp, and token attribyte
  • Loading branch information...
commit 40b1f3595003f3d4b75964160453b8cfa4532b03 1 parent 54f4c2d
Luca Deltodesco authored
Showing with 27 additions and 3 deletions.
  1. +12 −2 cx-src/HLlr.cx
  2. +11 −0 cx-src/Main.cx
  3. +4 −1 scripts/hlex.hlr
View
14 cx-src/HLlr.cx
@@ -7,6 +7,7 @@ package ;
hlx_attr(token:String, attr:String);
hlx_extra(haxe:String);
hlx_err(name:String);
+ hlx_both(prec:Int, regexp:String, attr:String);
}
class Error {
@@ -21,9 +22,9 @@ class HLlr {
errors = new Array<String>();
var _ = aE;
- var actions = [[aR(0),aS(3),_,aS(4),aS(9),_,_,_,_,aS(15),_,aS(21),aS(22),aG(2),aG(0)],[_,aS(3),_,aS(4),aS(9),_,_,_,_,aS(15),_,aS(21),aS(22),aG(25),aG(0)],[aR(1),_,_,_,_,_,_,_,_,_,_,_,_,_,_],[aR(7),aR(7),_,aR(7),aR(7),_,_,_,_,aR(7),_,aR(7),aR(7),_,_],[_,_,_,_,_,_,_,aS(5),_,_,_,_,_,_,_],[_,_,aS(6),_,_,_,_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,aS(7),_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_,_,aS(8),_,_,_,_],[aR(2),aR(2),_,aR(2),aR(2),_,_,_,_,aR(2),_,aR(2),aR(2),_,_],[_,_,_,_,_,aS(10),_,_,_,_,_,_,_,_,_],[_,_,aS(11),_,_,_,_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,aS(12),_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,aS(13),_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_,_,_,aS(14),_,_,_],[aR(3),aR(3),_,aR(3),aR(3),_,_,_,_,aR(3),_,aR(3),aR(3),_,_],[_,_,_,aS(16),_,_,_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,aS(17),_,_,_,_,_,_,_],[_,_,aS(18),_,_,_,_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,aS(19),_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_,_,aS(20),_,_,_,_],[aR(5),aR(5),_,aR(5),aR(5),_,_,_,_,aR(5),_,aR(5),aR(5),_,_],[aR(4),aR(4),_,aR(4),aR(4),_,_,_,_,aR(4),_,aR(4),aR(4),_,_],[_,_,_,_,_,_,_,aS(23),_,_,_,_,_,_,_],[_,_,aS(24),_,_,_,_,_,_,_,_,_,_,_,_],[aR(6),aR(6),_,aR(6),aR(6),_,_,_,_,aR(6),_,aR(6),aR(6),_,_],[aA,_,_,_,_,_,_,_,_,_,_,_,_,_,_]];
+ var actions = [[aR(0),aS(3),_,aS(4),aS(12),_,_,_,_,aS(18),_,aS(24),aS(25),aG(2),aG(0)],[_,aS(3),_,aS(4),aS(12),_,_,_,_,aS(18),_,aS(24),aS(25),aG(28),aG(0)],[aR(1),_,_,_,_,_,_,_,_,_,_,_,_,_,_],[aR(8),aR(8),_,aR(8),aR(8),_,_,_,_,aR(8),_,aR(8),aR(8),_,_],[_,_,_,_,_,_,_,aS(5),_,_,_,_,_,_,_],[_,_,aS(6),_,_,_,_,_,_,_,aS(9),_,_,_,_],[_,_,_,_,_,_,_,_,aS(7),_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_,_,aS(8),_,_,_,_],[aR(2),aR(2),_,aR(2),aR(2),_,_,_,_,aR(2),_,aR(2),aR(2),_,_],[_,_,_,_,_,_,_,_,aS(10),_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_,_,_,aS(11),_,_,_],[aR(7),aR(7),_,aR(7),aR(7),_,_,_,_,aR(7),_,aR(7),aR(7),_,_],[_,_,_,_,_,aS(13),_,_,_,_,_,_,_,_,_],[_,_,aS(14),_,_,_,_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,aS(15),_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,aS(16),_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_,_,_,aS(17),_,_,_],[aR(3),aR(3),_,aR(3),aR(3),_,_,_,_,aR(3),_,aR(3),aR(3),_,_],[_,_,_,aS(19),_,_,_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,aS(20),_,_,_,_,_,_,_],[_,_,aS(21),_,_,_,_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,aS(22),_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_,_,aS(23),_,_,_,_],[aR(5),aR(5),_,aR(5),aR(5),_,_,_,_,aR(5),_,aR(5),aR(5),_,_],[aR(4),aR(4),_,aR(4),aR(4),_,_,_,_,aR(4),_,aR(4),aR(4),_,_],[_,_,_,_,_,_,_,aS(26),_,_,_,_,_,_,_],[_,_,aS(27),_,_,_,_,_,_,_,_,_,_,_,_],[aR(6),aR(6),_,aR(6),aR(6),_,_,_,_,aR(6),_,aR(6),aR(6),_,_],[aA,_,_,_,_,_,_,_,_,_,_,_,_,_,_]];
- var rules = [{ cb : R0, sym : 13 , cnt : 1 },{ cb : R1, sym : 13 , cnt : 2 },{ cb : R2, sym : 14 , cnt : 5 },{ cb : R3, sym : 14 , cnt : 6 },{ cb : R4, sym : 14 , cnt : 1 },{ cb : R5, sym : 14 , cnt : 6 },{ cb : R6, sym : 14 , cnt : 3 },{ cb : R7, sym : 14 , cnt : 1 }];
+ var rules = [{ cb : R0, sym : 13 , cnt : 1 },{ cb : R1, sym : 13 , cnt : 2 },{ cb : R2, sym : 14 , cnt : 5 },{ cb : R3, sym : 14 , cnt : 6 },{ cb : R4, sym : 14 , cnt : 1 },{ cb : R5, sym : 14 , cnt : 6 },{ cb : R6, sym : 14 , cnt : 3 },{ cb : R7, sym : 14 , cnt : 5 },{ cb : R8, sym : 14 , cnt : 1 }];
var entry_state = 1;
@@ -125,6 +126,15 @@ return if(ret.length==0) null else ret[0]; }
}
private static inline function R7(ret:Array<Dynamic>) {
//assign arguments.
+ var hllr__4 = ret.pop();
+ var hllr__3 = ret.pop();
+ var hllr__2 = ret.pop();
+ var hllr__1 = ret.pop();
+ var hllr__0 = ret.pop();
+ ret.push(({ Error.err = false; hlx_both(hllr__0.data,hllr__2.data,hllr__4.data); }));
+ }
+ private static inline function R8(ret:Array<Dynamic>) {
+ //assign arguments.
var hllr__0 = ret.pop();
ret.push(({
if(!Error.err) { Error.errors.push("Unrecognised statement"); Error.err = true; }
View
11 cx-src/Main.cx
@@ -125,6 +125,8 @@ class Main {
var error_attr = null;
+ var unique:String = "UNIQUE_";
+ var unocnt:Int = 0;
for(S in hlx) {
switch(S) {
case hlx_ignore(n,p,reg):
@@ -169,6 +171,15 @@ class Main {
}
error_node = { name : n, id : tokenid++ };
+
+ case hlx_both(p, reg,attr):
+ var n = unique + (unocnt++);
+ var nfa = RegExp.nfa(Unicode.fromString(reg));
+ var rule = { name : n, id : tokenid++, nfa : nfa, attr : attr, ign : false };
+ FaUtil(CharSet).attribute(nfa, p, function (_) return rule);
+
+ nfrules.push(nfa);
+ rules.insert(n,rule);
case hlx_extra(haxe):
extra += haxe;
View
5 scripts/hlex.hlr
@@ -9,6 +9,7 @@
hlx_attr(token:String, attr:String);
hlx_extra(haxe:String);
hlx_err(name:String);
+ hlx_both(prec:Int, regexp:String, attr:String);
}
class Error {
@@ -29,10 +30,12 @@
| NULL INT COLON IDENT COLEQ REGEXP %{ Error.err = false; hlx_ignore(%3.data,%1.data,%5.data); %}
| ERR COLON IDENT %{ Error.err = false; hlx_err(%2.data); %}
+
+ | INT COLON REGEXP COLEQ HAXE %{ Error.err = false; hlx_both(%0.data,%2.data,%4.data); %}
| ERROR
%{
if(!Error.err) { Error.errors.push("Unrecognised statement"); Error.err = true; }
null;
%}
- ;
+ ;
Please sign in to comment.
Something went wrong with that request. Please try again.