From b0c91f0579687c48ad89181784d80691c3a24f08 Mon Sep 17 00:00:00 2001 From: alterdekim Date: Thu, 7 Nov 2024 02:45:38 +0300 Subject: [PATCH] modified: app/Lexer.hs modified: app/Parser.hs modified: as/test.as --- app/Lexer.hs | 15 +++++++++++++-- app/Parser.hs | 6 +++--- as/test.as | 2 +- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/app/Lexer.hs b/app/Lexer.hs index 8ed6521..ec7acea 100644 --- a/app/Lexer.hs +++ b/app/Lexer.hs @@ -5,7 +5,7 @@ import Data.Char (ord) import Debug.Trace; -data TokenType = Quotes | Dot | Comma | Colon | EndStatement | Numeric | Literal | Assignment | OpenParen | CloseParen | OpenCurved | CloseCurved | OpenSquared | CloseSquared | Arithmetic | Comparison | Bitwise | Empty | SoftComp | CompositeAssign deriving (Show, Eq) +data TokenType = Quotes | Dot | Comma | Colon | EndStatement | Numeric | Literal | Assignment | OpenParen | CloseParen | OpenCurved | CloseCurved | OpenSquared | CloseSquared | Arithmetic | Comparison | Bitwise | Empty | SoftComp | CompositeAssign | VarKeyword deriving (Show, Eq) data Token = Token {value :: [Char], token_type :: TokenType} deriving (Show) -- makes token from single char @@ -36,7 +36,18 @@ makeTokenFromEveryChar code = map (\c -> parseSingleToken c) code -- entry point, which should be called to start lexer. tokenize :: [Char] -> [Token] -tokenize sourceCode = excludeEmpty (checkFor (makeTokenFromEveryChar sourceCode)) +tokenize sourceCode = keyworder (excludeEmpty (checkFor (makeTokenFromEveryChar sourceCode))) + +keyworder :: [Token] -> [Token] +keyworder t + | tv == "var" = (Token tv VarKeyword):(keyworderG tt) + | otherwise = th:(keyworderG tt) + where th = head t + tt = tail t + tv = value th + +keyworderG :: [Token] -> [Token] +keyworderG t = if length t > 0 then keyworder t else [] excludeEmpty :: [Token] -> [Token] excludeEmpty t = filter (\c -> (token_type c) /= Empty) t diff --git a/app/Parser.hs b/app/Parser.hs index eaebc75..01dea7f 100644 --- a/app/Parser.hs +++ b/app/Parser.hs @@ -7,13 +7,13 @@ data StmtType = Void | VariableDeclaration | AssignmentExpression | BinaryExpres data TreeNode = TreeNode { stype :: StmtType, children :: [TreeNode], val :: [Char] } deriving (Show, Eq) -parseTokens :: [Token] -> [TreeNode] +parseTokens :: [Token] -> TreeNode parseTokens tt - | k == VariableDeclaration = parseVariableDeclaration tt + | k == VarKeyword = parseVariableDeclaration tt | otherwise = TreeNode Void [] "" where t = head tt k = token_type t -- Keyword(var) Literal Colon Literal Assignment (Expression) EndStatement parseVariableDeclaration :: [Token] -> TreeNode -parseVariableDeclaration tt = \ No newline at end of file +parseVariableDeclaration tt = TreeNode VariableDeclaration [] [] \ No newline at end of file diff --git a/as/test.as b/as/test.as index 064a97a..16cd6a3 100644 --- a/as/test.as +++ b/as/test.as @@ -1 +1 @@ -var i: int = 0; \ No newline at end of file +2 + 2 * 2; \ No newline at end of file