diff --git a/conf/cf-lex.l b/conf/cf-lex.l index c68a42e4..04b0c604 100644 --- a/conf/cf-lex.l +++ b/conf/cf-lex.l @@ -131,7 +131,11 @@ WHITE [ \t] return NUM; } -{ALPHA}{ALNUM}* { +({ALPHA}{ALNUM}*|[']({ALNUM}|[-])*[']) { + if(*yytext == '\'') { + yytext[yyleng-1] = 0; + yytext++; + } unsigned int h = cf_hash(yytext); struct keyword *k = kw_hash[h & (KW_HASH_SIZE-1)]; while (k) diff --git a/doc/bird.conf.example b/doc/bird.conf.example index 6ab03a23..51b2c0ec 100644 --- a/doc/bird.conf.example +++ b/doc/bird.conf.example @@ -13,7 +13,8 @@ #router id 62.168.0.1; # You can define your own symbols... -#define xyzzy = 120+10; +#define xyzzy = (120+10); +#define '1a-a1' = (30+40); # Define a route filter... filter test_filter { diff --git a/filter/test.conf b/filter/test.conf index 2e828633..fb35afbe 100644 --- a/filter/test.conf +++ b/filter/test.conf @@ -8,9 +8,10 @@ router id 62.168.0.1; define xyzzy = (120+10); +define '1a-a1' = (20+10); -function mkpair(int a) +function 'mkpair-a'(int a) { return (1, a); } @@ -132,7 +133,8 @@ pair pp; int set is; prefix set pxs; string s; -{ +{ + print "1a-a1 = 30: ", '1a-a1'; print "Testing filter language:"; i = four; i = 12*100 + 60/2 + i; @@ -149,9 +151,9 @@ string s; is = [ 2, 3, 4, 7..11 ]; print " must be true: ", 1.2.0.0/16 ~ [ 1.0.0.0/8{ 15 , 17 } ]; print " data types; must be true: ", 1.2.3.4 = 1.2.3.4, ",", 1 ~ [1,2,3], ",", 5 ~ [1..20], ",", 10 ~ is, ",", 2 ~ [ 1, 2, 3 ], ",", 5 ~ [ 4 .. 7 ], ",", 1.2.3.4 ~ [ 1.2.3.3..1.2.3.5 ], ",", 1.2.3.4 ~ 1.0.0.0/8, ",", 1.0.0.0/8 ~ 1.0.0.0/8, ",", 1.0.0.0/8 ~ [ 1.0.0.0/8+ ]; - print " must be true: ", true && true, ",", true || false, ",", ! false && ! false && true, ",", 1 < 2 && 1 != 3; + print " must be true: ", true && true, ",", true || false, ",", ! false && ! false && true, ",", 1 < 2 && 1 != 3, ",", true && true && ! false; -# print " must be true: ", defined(1), ",", defined(1.2.3.4), ",", 1 != 2, ",", 1 <= 2; + print " must be true: ", defined(1), ",", defined(1.2.3.4), ",", 1 != 2, ",", 1 <= 2; print " data types: must be false: ", 1 ~ [ 2, 3, 4 ], ",", 5 ~ is, ",", 1.2.3.4 ~ [ 1.2.3.3, 1.2.3.5 ], ",", (1,2) > (2,2), ",", (1,1) > (1,1), ",", 1.0.0.0/9 ~ [ 1.0.0.0/8- ], ",", 1.2.0.0/17 ~ [ 1.0.0.0/8{ 15 , 16 } ], ",", true && false; px = 1.2.0.0/18; @@ -163,7 +165,7 @@ string s; print "Testing mask : 127.0.0.0 = ", p.mask(8); pp = (1, 2); - print "Testing pairs: (1,2) = ", (1,2), " = ", pp, " = ", (1,1+1), " = ", mkpair(2); + print "Testing pairs: (1,2) = ", (1,2), " = ", pp, " = ", (1,1+1), " = ", 'mkpair-a'(2); print " must be true: ", (1,2) = (1,1+1); print "Testing enums: ", RTS_DUMMY, " ", RTS_STATIC;