aboutsummaryrefslogtreecommitdiff
path: root/compiler/lexer_test.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2021-05-25 21:55:17 +0900
committerRyo Nihei <nihei.dev@gmail.com>2021-05-25 21:57:45 +0900
commit520bf02582be7ab36b17fd78f8931cfdb702b07f (patch)
treea1e7ad54915152fce6f96a18312e28f34f256c84 /compiler/lexer_test.go
parentFix the initial state number (diff)
downloadtre-520bf02582be7ab36b17fd78f8931cfdb702b07f.tar.gz
tre-520bf02582be7ab36b17fd78f8931cfdb702b07f.tar.xz
Add fragment expression
A fragment entry is defined by an entry whose `fragment` field is `true`, and is referenced by a fragment expression (`\f{...}`).
Diffstat (limited to 'compiler/lexer_test.go')
-rw-r--r--compiler/lexer_test.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/compiler/lexer_test.go b/compiler/lexer_test.go
index 089253b..51eb82e 100644
--- a/compiler/lexer_test.go
+++ b/compiler/lexer_test.go
@@ -445,6 +445,34 @@ func TestLexer(t *testing.T) {
newToken(tokenKindEOF, nullChar),
},
},
+ {
+ caption: "lexer can recognize the special characters and symbols in fragment expression mode",
+ src: "\\f{integer}",
+ tokens: []*token{
+ newToken(tokenKindFragmentLeader, nullChar),
+ newToken(tokenKindLBrace, nullChar),
+ newFragmentSymbolToken("integer"),
+ newToken(tokenKindRBrace, nullChar),
+
+ newToken(tokenKindEOF, nullChar),
+ },
+ },
+ {
+ caption: "a fragment expression is not supported in a bracket expression",
+ src: "[\\f",
+ tokens: []*token{
+ newToken(tokenKindBExpOpen, nullChar),
+ },
+ err: synErrInvalidEscSeq,
+ },
+ {
+ caption: "a fragment expression is not supported in an inverse bracket expression",
+ src: "[^\\f",
+ tokens: []*token{
+ newToken(tokenKindInverseBExpOpen, nullChar),
+ },
+ err: synErrInvalidEscSeq,
+ },
}
for _, tt := range tests {
t.Run(tt.caption, func(t *testing.T) {