diff options
author | Adrian Thurston <thurston@complang.org> | 2014-01-19 11:53:37 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2014-01-19 11:53:37 -0500 |
commit | 71678f115516e92ccbfd333d46f493d7b5b34bce (patch) | |
tree | 494143e9c45d1f67ad1e59ca0e3031399d422e28 | |
parent | 80e1f57d2e12be6ab30af28306cae8e675029a87 (diff) | |
download | colm-71678f115516e92ccbfd333d46f493d7b5b34bce.tar.gz |
updated ni syntax, require - between def and kw
literal `( -ni
token id /'a'/ -ni
This allows ni to appear in literal defs without an ambiguity beween left and
right ignore.
-rw-r--r-- | src/colm.lm | 14 | ||||
-rw-r--r-- | src/loadcolm.cc | 17 | ||||
-rw-r--r-- | test/exit4.lm | 8 | ||||
-rw-r--r-- | test/exit5.lm | 8 | ||||
-rw-r--r-- | test/exit6.lm | 8 | ||||
-rw-r--r-- | test/ignore3.lm | 6 | ||||
-rw-r--r-- | test/ignore4.lm | 2 | ||||
-rw-r--r-- | test/ignore5.lm | 7 | ||||
-rw-r--r-- | test/inpush1.lm | 2 | ||||
-rw-r--r-- | test/tcontext1.lm | 2 |
10 files changed, 41 insertions, 33 deletions
diff --git a/src/colm.lm b/src/colm.lm index feeec83c..e5f1d6d1 100644 --- a/src/colm.lm +++ b/src/colm.lm @@ -298,10 +298,14 @@ def literal_list | [literal_item] :Base def literal_item - [NiLeft: opt_no_ignore backtick_lit NiRight: opt_no_ignore] + [no_ignore_left backtick_lit no_ignore_right] -def opt_no_ignore - [NI] :Ni +def no_ignore_left + [NI MINUS] :Ni +| [] + +def no_ignore_right + [MINUS NI] :Ni | [] def namespace_def @@ -349,9 +353,9 @@ def opt_lex_expr def token_def [TOKEN id VarDefList: var_def* - NiLeft: opt_no_ignore + no_ignore_left LEX_FSLASH opt_lex_expr LEX_FSLASH - NiRight: opt_no_ignore + no_ignore_right opt_translate] def ic_def diff --git a/src/loadcolm.cc b/src/loadcolm.cc index 40576040..6bdac1c8 100644 --- a/src/loadcolm.cc +++ b/src/loadcolm.cc @@ -318,8 +318,8 @@ struct LoadColm { String name = TokenDef.id().data(); - bool niLeft = walkOptNoIgnore( TokenDef.NiLeft() ); - bool niRight = walkOptNoIgnore( TokenDef.NiRight() ); + bool niLeft = walkNoIgnoreLeft( TokenDef.no_ignore_left() ); + bool niRight = walkNoIgnoreRight( TokenDef.no_ignore_right() ); ObjectDef *objectDef = walkVarDefList( TokenDef.VarDefList() ); objectDef->name = name; @@ -2241,9 +2241,14 @@ struct LoadColm }} } - bool walkOptNoIgnore( opt_no_ignore OptNoIngore ) + bool walkNoIgnoreLeft( no_ignore_left OptNoIngore ) { - return OptNoIngore.prodName() == opt_no_ignore::_Ni; + return OptNoIngore.prodName() == no_ignore_left::_Ni; + } + + bool walkNoIgnoreRight( no_ignore_right OptNoIngore ) + { + return OptNoIngore.prodName() == no_ignore_right::_Ni; } bool walkOptEos( opt_eos OptEos ) @@ -2254,8 +2259,8 @@ struct LoadColm void walkLiteralItem( literal_item literalItem ) { - bool niLeft = walkOptNoIgnore( literalItem.NiLeft() ); - bool niRight = walkOptNoIgnore( literalItem.NiRight() ); + bool niLeft = walkNoIgnoreLeft( literalItem.no_ignore_left() ); + bool niRight = walkNoIgnoreRight( literalItem.no_ignore_right() ); String lit = literalItem.backtick_lit().data(); literalDef( literalItem.backtick_lit().loc(), lit, niLeft, niRight ); diff --git a/test/exit4.lm b/test/exit4.lm index bed57922..37751d66 100644 --- a/test/exit4.lm +++ b/test/exit4.lm @@ -153,9 +153,9 @@ namespace ragel "'" ( [^'\\] | '\\' any )* "'" 'i'? / - token lex_regex_open /'/'/ ni - token lex_sqopen_pos /'['/ ni - token lex_sqopen_neg /'[^'/ ni + token lex_regex_open /'/'/ -ni + token lex_sqopen_pos /'['/ -ni + token lex_sqopen_neg /'[^'/ -ni token word /[a-zA-Z_][a-zA-Z0-9_]*/ token uint / number / @@ -506,7 +506,7 @@ lex / '#ifdef' ' '* INPUT / token ifdef_OUTPUT - / '#ifdef' ' '* OUTPUT ' '* '\n' / ni + / '#ifdef' ' '* OUTPUT ' '* '\n' / -ni token endif / '#endif' / diff --git a/test/exit5.lm b/test/exit5.lm index f80971f6..6986c5bc 100644 --- a/test/exit5.lm +++ b/test/exit5.lm @@ -153,9 +153,9 @@ namespace ragel "'" ( [^'\\] | '\\' any )* "'" 'i'? / - token lex_regex_open /'/'/ ni - token lex_sqopen_pos /'['/ ni - token lex_sqopen_neg /'[^'/ ni + token lex_regex_open /'/'/ -ni + token lex_sqopen_pos /'['/ -ni + token lex_sqopen_neg /'[^'/ -ni token word /[a-zA-Z_][a-zA-Z0-9_]*/ token uint / number / @@ -506,7 +506,7 @@ lex / '#ifdef' ' '* INPUT / token ifdef_OUTPUT - / '#ifdef' ' '* OUTPUT ' '* '\n' / ni + / '#ifdef' ' '* OUTPUT ' '* '\n' / -ni token endif / '#endif' / diff --git a/test/exit6.lm b/test/exit6.lm index 20e26421..3f7fd03f 100644 --- a/test/exit6.lm +++ b/test/exit6.lm @@ -153,9 +153,9 @@ namespace ragel "'" ( [^'\\] | '\\' any )* "'" 'i'? / - token lex_regex_open /'/'/ ni - token lex_sqopen_pos /'['/ ni - token lex_sqopen_neg /'[^'/ ni + token lex_regex_open /'/'/ -ni + token lex_sqopen_pos /'['/ -ni + token lex_sqopen_neg /'[^'/ -ni token word /[a-zA-Z_][a-zA-Z0-9_]*/ token uint / number / @@ -506,7 +506,7 @@ lex / '#ifdef' ' '* INPUT / token ifdef_OUTPUT - / '#ifdef' ' '* OUTPUT ' '* '\n' / ni + / '#ifdef' ' '* OUTPUT ' '* '\n' / -ni token endif / '#endif' / diff --git a/test/ignore3.lm b/test/ignore3.lm index 681e0ed0..d95f030a 100644 --- a/test/ignore3.lm +++ b/test/ignore3.lm @@ -2,15 +2,15 @@ lex ignore /space+/ literal `* - literal `( ni - literal ni `) + literal `( -ni + literal ni- `) literal `! `; token id /[a-zA-Z_0-9]+/ end lex ignore /space+/ - token inner_t /[a-zA-Z_0-9]+/ + token inner_t /[a-zA-Z_0-9]+/ token empty - end diff --git a/test/ignore4.lm b/test/ignore4.lm index 9333bd59..cdd94b34 100644 --- a/test/ignore4.lm +++ b/test/ignore4.lm @@ -3,7 +3,7 @@ namespace hash lex literal `define `include - token NL /'\n'/ ni + token NL /'\n'/ -ni token id /[a-zA-Z_][a-zA-Z_0-9]*/ token number /[0-9]+/ diff --git a/test/ignore5.lm b/test/ignore5.lm index f626c572..28a33927 100644 --- a/test/ignore5.lm +++ b/test/ignore5.lm @@ -2,8 +2,7 @@ lex ignore /space+/ literal `* `! `; - token POPEN /'('/ ni - token PCLOSE ni /')'/ + literal `( -ni ni- `) token id /[a-zA-Z_0-9]+/ end @@ -19,7 +18,7 @@ def inner def item [id] -| [POPEN inner PCLOSE] +| [`( inner `)] def start [item* `;] @@ -33,7 +32,7 @@ if ( ! Start ) { for I: item in Start { print( 'item: .' I '.\n' ) - if match I [ O: POPEN Inner: inner C: PCLOSE ] + if match I [ O: `( Inner: inner C: `) ] print( 'innr: .' O '.' Inner '.' C '.\n' ) } diff --git a/test/inpush1.lm b/test/inpush1.lm index 362cd1a7..9f7be150 100644 --- a/test/inpush1.lm +++ b/test/inpush1.lm @@ -28,7 +28,7 @@ namespace hash lex literal `define `include literal `# - token NL /'\n'/ ni + token NL /'\n'/ -ni token id /[a-zA-Z_][a-zA-Z_0-9]*/ token number /[0-9]+/ diff --git a/test/tcontext1.lm b/test/tcontext1.lm index 4705b9e6..86db7182 100644 --- a/test/tcontext1.lm +++ b/test/tcontext1.lm @@ -1,7 +1,7 @@ ##### LM ##### lex - token tIDENTIFIER /[a-z][a-zA-Z_]*/ ni + token tIDENTIFIER /[a-z][a-zA-Z_]*/ -ni ignore /[ \t\n]+/ ignore comment /'#' [^\n]* '\n'/ end |