nitcc_rt: do not create ignored tokens
authorJean Privat <jean@pryen.org>
Fri, 4 Dec 2015 13:58:07 +0000 (08:58 -0500)
committerJean Privat <jean@pryen.org>
Fri, 4 Dec 2015 13:58:07 +0000 (08:58 -0500)
Signed-off-by: Jean Privat <jean@pryen.org>

contrib/nitcc/src/autom.nit
lib/nitcc_runtime.nit

index 946b420..d2ab41d 100644 (file)
@@ -688,8 +688,13 @@ private class DFAGenerator
                                        token = null
                                end
                                add("\tredef fun is_accept do return true\n")
-                               add("\tredef fun make_token(position, text) do\n")
+                               var is_ignored = false
                                if token != null and token.name == "Ignored" then
+                                       is_ignored = true
+                                       add("\tredef fun is_ignored do return true\n")
+                               end
+                               add("\tredef fun make_token(position, text) do\n")
+                               if is_ignored then
                                        add("\t\treturn null\n")
                                else
                                        if token == null then
index a85b22b..f50f8ee 100644 (file)
@@ -204,9 +204,11 @@ abstract class Lexer
                                                res.add token
                                                break
                                        end
-                                       var position = new Position(pos_start, pos_end, line_start, line_end, col_start, col_end)
-                                       var token = last_state.make_token(position, text.substring(pos_start, pos_end-pos_start+1))
-                                       if token != null then res.add(token)
+                                       if not last_state.is_ignored then
+                                               var position = new Position(pos_start, pos_end, line_start, line_end, col_start, col_end)
+                                               var token = last_state.make_token(position, text.substring(pos_start, pos_end-pos_start+1))
+                                               if token != null then res.add(token)
+                                       end
                                end
                                if pos >= length then
                                        var token = new NEof
@@ -245,6 +247,7 @@ interface DFAState
        fun is_accept: Bool do return false
        fun trans(c: Char): nullable DFAState do return null
        fun make_token(position: Position, text: String): nullable NToken is abstract
+       fun is_ignored: Bool do return false
 end
 
 ###