nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
parser: regenerate with comments in line annotations
[nit.git]
/
contrib
/
nitcc
/
src
/
nitcc.sablecc
diff --git
a/contrib/nitcc/src/nitcc.sablecc
b/contrib/nitcc/src/nitcc.sablecc
index
a4e923b
..
d435c77
100644
(file)
--- a/
contrib/nitcc/src/nitcc.sablecc
+++ b/
contrib/nitcc/src/nitcc.sablecc
@@
-7,7
+7,7
@@
Lexer
id = ('a'..'z')('a'..'z'|'0'..'9'|'_')*;
// A printable character (inside strings)
id = ('a'..'z')('a'..'z'|'0'..'9'|'_')*;
// A printable character (inside strings)
-ch = ' ' .. '~';
+ch = ' ' ...;
// Literal strings
str = '\'' (ch-'\\'-'\''|'\\'ch)* '\'';
// Literal strings
str = '\'' (ch-'\\'-'\''|'\\'ch)* '\'';
@@
-15,10
+15,13
@@
str = '\'' (ch-'\\'-'\''|'\\'ch)* '\'';
// A char by decimal ascii
ch_dec = '#' ('0'..'9')+ ;
// A char by decimal ascii
ch_dec = '#' ('0'..'9')+ ;
+// A char by hexadecimal ascii
+ch_hex = '#' ('x'|'X') ('0'..'9'|'a'..'z'|'A'..'Z')+ ;
+
// A single-line comment
comment = '//' ch* '\n'?;
// A single-line comment
comment = '//' ch* '\n'?;
-any = '\t'..'~';
+any = '\t' ...;
not_star = any - '*';
not_star_not_slash = not_star - '/';
not_star = any - '*';
not_star_not_slash = not_star - '/';
@@
-27,14
+30,14
@@
ccomment = '/*' not_star* ('*' (not_star_not_slash not_star*)?)* '*/';
unknown_keyword = 'A'..'Z'('A'..'Z'|'a'..'z'|'0'..'9'|'_')*;
// Igndored stufs
unknown_keyword = 'A'..'Z'('A'..'Z'|'a'..'z'|'0'..'9'|'_')*;
// Igndored stufs
-blank = '\n' | '\t' | ' ' | comment | ccomment;
+blank = '\r' | '\n' | '\t' | ' ' | comment | ccomment;
Parser
Ignored blank;
Rejected unknown_keyword;
Parser
Ignored blank;
Rejected unknown_keyword;
-grammar = 'Grammar' id ';' lexer_part? parser_part?;
+grammar = 'Grammar' id ';' lexer_part? parser_part? tree_part?;
lexer_part = 'Lexer' expr*;
lexer_part = 'Lexer' expr*;
@@
-61,21
+64,27
@@
re3 {-> re} =
{plus:} re3 '+' |
{shortest:} 'Shortest' '(' re ')' |
{longest:} 'Longest' '(' re ')' |
{plus:} re3 '+' |
{shortest:} 'Shortest' '(' re ')' |
{longest:} 'Longest' '(' re ')' |
+ {prefixes:} 'Prefixes' '(' re ')' |
{id:} id |
{id:} id |
- {str:} str |
{par:} '(' re ')' |
{par:} '(' re ')' |
- {class:} str '.' '.' str |
+ {class:} text '.' '.' text |
+ {openclass:} text '.' '.' '.' |
{any:} 'Any' |
{any:} 'Any' |
- {ch_dec:} ch_dec ;
+ {end:} 'End' |
+ {text:} text ;
+text {-> re} =
+ {str:} str |
+ {ch_dec:} ch_dec |
+ {ch_hex:} ch_hex ;
parser_part = 'Parser' ign? rej? prod*;
parser_part = 'Parser' ign? rej? prod*;
-ign = 'Ignored' id ';' ;
+ign = 'Ignored' elem_list ';' ;
rej = 'Rejected' elem_list ';' ;
rej = 'Rejected' elem_list ';' ;
-prod = id ptrans? '=' alts ';';
+prod = id ptrans? '=' alts priority* ';';
ptrans = '{' '->' id '}';
atrans = '{' '->' '}';
ptrans = '{' '->' id '}';
atrans = '{' '->' '}';
@@
-98,7
+107,15
@@
elem_list =
elem =
{id:} id |
elem =
{id:} id |
- {str:} str |
+ {str:} text |
{star:} elem '*' |
{ques:} elem '?' |
{star:} elem '*' |
{ques:} elem '?' |
- {plus:} elem '+' ;
+ {plus:} elem '+' |
+ {empty:} 'Empty' ;
+
+priority =
+ {left:} 'Left' alts |
+ {right:} 'Right' alts |
+ {unary:} 'Unary' alts ;
+
+tree_part = 'Tree' prod*;