Removed a lot of the junk from the lexer I'd recently added
The lexer is now roughly as it was a couple of weeks ago.
This commit is contained in:
parent
51f67f59b4
commit
1cb17a85c4
|
@ -100,19 +100,9 @@ occam :-
|
||||||
-- In state one, we're reading the first thing on a line.
|
-- In state one, we're reading the first thing on a line.
|
||||||
-- In state two, we're reading the rest of the line.
|
-- In state two, we're reading the rest of the line.
|
||||||
-- In state three, we're in the middle of a multi-line string.
|
-- In state three, we're in the middle of a multi-line string.
|
||||||
-- In state four, we're in the middle of a pragma-external string
|
|
||||||
-- In state five, we're lexing a pragma. State five is only entered specifically,
|
|
||||||
-- when we re-lex and re-parse pragmas (but it makes it easiest to put it
|
|
||||||
-- in this file too, since it can lex occam).
|
|
||||||
|
|
||||||
<0> $horizSpace* { mkState one }
|
<0> $horizSpace* { mkState one }
|
||||||
|
|
||||||
<five> "SHARED" { mkToken Pragma two }
|
|
||||||
<five> "PERMITALIASES" { mkToken Pragma two }
|
|
||||||
<five> "EXTERNAL" $horizSpace* \" { mkToken Pragma four }
|
|
||||||
<five> "OCCAMEXTERNAL" $horizSpace* \" { mkToken Pragma four }
|
|
||||||
<four> \" $horizSpace* { mkState 0 }
|
|
||||||
|
|
||||||
<one> @preprocessor { mkToken TokPreprocessor 0 }
|
<one> @preprocessor { mkToken TokPreprocessor 0 }
|
||||||
<one, two> "--" [^\n]* { mkState 0 }
|
<one, two> "--" [^\n]* { mkState 0 }
|
||||||
<one, two> $vertSpace+ { mkState 0 }
|
<one, two> $vertSpace+ { mkState 0 }
|
||||||
|
@ -120,9 +110,6 @@ occam :-
|
||||||
<one, two> @reserved { mkToken TokReserved two }
|
<one, two> @reserved { mkToken TokReserved two }
|
||||||
<one, two> @identifier { mkToken TokIdentifier two }
|
<one, two> @identifier { mkToken TokIdentifier two }
|
||||||
|
|
||||||
<four> @reserved { mkToken TokReserved four }
|
|
||||||
<four> @identifier { mkToken TokIdentifier four }
|
|
||||||
|
|
||||||
<one, two> @charLiteral { mkToken TokCharLiteral two }
|
<one, two> @charLiteral { mkToken TokCharLiteral two }
|
||||||
<one, two> @fullString { mkToken TokStringLiteral two }
|
<one, two> @fullString { mkToken TokStringLiteral two }
|
||||||
<one, two> @startString { mkToken TokStringCont three }
|
<one, two> @startString { mkToken TokStringCont three }
|
||||||
|
@ -135,11 +122,7 @@ occam :-
|
||||||
<one, two> @hexLiteral { mkToken TokHexLiteral two }
|
<one, two> @hexLiteral { mkToken TokHexLiteral two }
|
||||||
<one, two> @realLiteral { mkToken TokRealLiteral two }
|
<one, two> @realLiteral { mkToken TokRealLiteral two }
|
||||||
|
|
||||||
<four> @intLiteral { mkToken TokIntLiteral four }
|
<two> $horizSpace+ ;
|
||||||
<four> @hexLiteral { mkToken TokHexLiteral four }
|
|
||||||
<four> @realLiteral { mkToken TokRealLiteral four }
|
|
||||||
|
|
||||||
<two, four, five> $horizSpace+ ;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
-- | An occam source token and its position.
|
-- | An occam source token and its position.
|
||||||
|
@ -221,29 +204,5 @@ runLexer filename str = go (alexStartPos, '\n', str) 0
|
||||||
metaColumn = col
|
metaColumn = col
|
||||||
}
|
}
|
||||||
|
|
||||||
-- | Run the lexer, returning a list of tokens.
|
|
||||||
-- (This is based on the `alexScanTokens` function that Alex provides.)
|
|
||||||
runPragmaLexer :: String -> String -> Either (Maybe Meta, String) [Token]
|
|
||||||
runPragmaLexer filename str = go (alexStartPos, '\n', str) five
|
|
||||||
where
|
|
||||||
go inp@(pos@(AlexPn _ line col), _, str) code =
|
|
||||||
case alexScan inp code of
|
|
||||||
AlexEOF -> return []
|
|
||||||
AlexError _ -> throwError (Just meta, "Unrecognised token")
|
|
||||||
AlexSkip inp' len -> go inp' code
|
|
||||||
AlexToken inp' len act ->
|
|
||||||
do let (t, code) = act pos (take len str)
|
|
||||||
ts <- go inp' code
|
|
||||||
return $ case t of
|
|
||||||
Just (Token _ tt) -> Token meta tt : ts
|
|
||||||
Nothing -> ts
|
|
||||||
|
|
||||||
where
|
|
||||||
meta = emptyMeta {
|
|
||||||
metaFile = Just filename,
|
|
||||||
metaLine = line,
|
|
||||||
metaColumn = col
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user