mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| (load "grammar.shen")
 | |
| 
 | |
| \*
 | |
| 
 | |
| JSON Lexer
 | |
| 
 | |
| 1. Read a stream of characters
 | |
| 2. Whitespace characters not in strings should be discarded.
 | |
| 3. Whitespace characters in strings should be preserved
 | |
| 4. Strings can contain escaped double quotes. e.g. "\""
 | |
| 
 | |
| *\
 | |
| 
 | |
| (define whitespacep
 | |
|   \* e.g. ASCII 32 == #\Space. *\
 | |
|   \* All the others are whitespace characters from an ASCII table. *\
 | |
|   Char -> (member Char ["c#9;" "c#10;" "c#11;" "c#12;" "c#13;" "c#32;"]))
 | |
| 
 | |
| (define replace-whitespace
 | |
|   "" -> ""
 | |
|   (@s Whitespace Suffix) -> (@s "" (replace-whitespace Suffix)) where (whitespacep Whitespace)
 | |
|   (@s Prefix Suffix) -> (@s Prefix (replace-whitespace Suffix)))
 | |
| 
 | |
| (define fetch-until-unescaped-doublequote
 | |
|   [] -> []
 | |
|   ["\" "c#34;" | Chars] -> ["\" "c#34;" | (fetch-until-unescaped-doublequote Chars)]
 | |
|   ["c#34;" | Chars] -> []
 | |
|   [Char | Chars] -> [Char | (fetch-until-unescaped-doublequote Chars)])
 | |
| 
 | |
| \* (define strip-whitespace-chars *\
 | |
| \*   [] -> [] *\
 | |
| \*   ["c#34;" | Chars] -> ["c#34;" | ( *\
 | |
| \*   [WhitespaceChar | Chars] -> (strip-whitespace-chars Chars) where (whitespace? WhitespaceChar) *\
 | |
| \*   [Char | Chars] -> [Char | (strip-whitespace-chars Chars)]) *\
 | |
| 
 | |
| (define tokenise
 | |
|   JSONString ->
 | |
|   (let CharList (explode JSONString)
 | |
|        CharList)) |