summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2014-01-19 11:53:37 -0500
committerAdrian Thurston <thurston@complang.org>2014-01-19 11:53:37 -0500
commit71678f115516e92ccbfd333d46f493d7b5b34bce (patch)
tree494143e9c45d1f67ad1e59ca0e3031399d422e28
parent80e1f57d2e12be6ab30af28306cae8e675029a87 (diff)
downloadcolm-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.lm14
-rw-r--r--src/loadcolm.cc17
-rw-r--r--test/exit4.lm8
-rw-r--r--test/exit5.lm8
-rw-r--r--test/exit6.lm8
-rw-r--r--test/ignore3.lm6
-rw-r--r--test/ignore4.lm2
-rw-r--r--test/ignore5.lm7
-rw-r--r--test/inpush1.lm2
-rw-r--r--test/tcontext1.lm2
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