lexer implement identifiers

This commit is contained in:
Marvin Schlegel 2024-05-01 22:16:12 +02:00
parent 6d39110794
commit b8e566a2a0
2 changed files with 11 additions and 4 deletions

View File

@ -11,11 +11,16 @@ testEmptyComment = TestCase $ assertEqual "scan '/*x*/'" emptyTokenList $ alex
testLineComment = TestCase $ assertEqual "scan '// comment'" emptyTokenList $ alexScanTokens "// comment" testLineComment = TestCase $ assertEqual "scan '// comment'" emptyTokenList $ alexScanTokens "// comment"
testLineCommentEnds = TestCase $ assertEqual "scan '// com\\n'" emptyTokenList $ alexScanTokens "// com\n" testLineCommentEnds = TestCase $ assertEqual "scan '// com\\n'" emptyTokenList $ alexScanTokens "// com\n"
testIdentifier = TestCase $ assertEqual "scan 'identifier'" [Identifier "identifier"] $ alexScanTokens "identifier"
testShortIdentifier = TestCase $ assertEqual "scan 'i'" [Identifier "i"] $ alexScanTokens "i"
testIdentifierWithNumber = TestCase $ assertEqual "scan 'i2'" [Identifier "i2"] $ alexScanTokens "i2"
tests = TestList [ tests = TestList [
TestLabel "TestCommentSomething" testCommentSomething, TestLabel "TestCommentSomething" testCommentSomething,
TestLabel "TestEmptyComment" testEmptyComment, TestLabel "TestEmptyComment" testEmptyComment,
TestLabel "TestLineComment" testLineComment, TestLabel "TestLineComment" testLineComment,
TestLabel "TestLineCommentEnds" testLineCommentEnds TestLabel "TestLineCommentEnds" testLineCommentEnds,
TestLabel "TestIdentifier" testIdentifier,
TestLabel "TestShortIdentifier" testShortIdentifier,
TestLabel "TestIdentifierWithNumber" testIdentifierWithNumber
] ]

View File

@ -7,17 +7,19 @@
$digit = 0-9 $digit = 0-9
$alpha = [a-zA-Z] $alpha = [a-zA-Z]
$alphanum = [a-zA-Z0-9] $alphanum = [a-zA-Z0-9]
$JavaLetter = [A-Za-z\_\$]
$JavaLetterOrDigit = [A-Za-z\_\$0-9]
tokens :- tokens :-
$white ; $white ;
"/*"(.|\n)*"*/" ; "/*"(.|\n)*"*/" ;
"//".* ; "//".* ;
$JavaLetter$JavaLetterOrDigit* { \s -> Identifier s }
{ {
data Token data Token
= Different = Identifier String
deriving(Eq,Show) deriving(Eq,Show)
} }