Skip to content

Commit

Permalink
Fix func call for value
Browse files Browse the repository at this point in the history
  • Loading branch information
Saverio976 committed Jan 4, 2024
1 parent 329dd10 commit 34071e9
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 14 deletions.
28 changes: 22 additions & 6 deletions lvtc/app/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,28 @@

module Main (main) where

import Expression
import Parser
import ParseLvt (parseInstruction)
import Expression (parseExpresion)
import Parser (runParser)
import ParseLvt (parseInstruction, parseInstructions)

test1 :: String
test1 = "if (a)\n{\nb(0);\n};\n"

test2 :: String
test2 = part1 ++ part2
where
part1 = "@Int a = 0;\n @Int c = b(a);\n"
part2 = " if (c)\n {\n d(a);\n };\n"

test3 :: String
test3 = "alias abc def;\n"

test4 :: String
test4 = "// this is a comment\n"

main :: IO ()
main =
print (runParser parseInstruction "if (a)\n{\nb(0);\n};\n")
>> print (runParser parseExpresion "alias abc def;\n")
>> print (runParser parseExpresion "// this is a comment\n")
print (runParser parseInstruction test1)
>> print (runParser parseInstructions test2)
>> print (runParser parseExpresion test3)
>> print (runParser parseExpresion test4)
12 changes: 8 additions & 4 deletions lvtc/src/ParseLvt.hs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ module ParseLvt
parseStringView,
parseVoid,
-- Instruction
parseInstructions,
parseInstruction,
parseFunction,
parseReturn,
Expand Down Expand Up @@ -92,12 +93,13 @@ parseVoid = f <$> parseString "Void"

parseValue :: Parser Value
parseValue =
parseBoolean
parseFuncValue
<|> parseBoolean
<|> parseVoid
<|> parseInteger
<|> parseCharacter
<|> parseStringView
<|> parseCharacter
<|> parseVar
<|> parseVoid

parseCallName :: Parser Symbol
parseCallName =
Expand Down Expand Up @@ -216,4 +218,6 @@ parseInstruction =
) <* parseString ";\n"

parseInstructions :: Parser [Instruction]
parseInstructions = some parseInstruction
parseInstructions = Parser f
where
f str = runParser (some parseInstruction) (lexeme str)
23 changes: 19 additions & 4 deletions lvtc/test/UTParseLvt.hs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ testParserHelper str restExpected expressionExpected =
assertEqual str expressionExpected parsed
Nothing -> assertFailure ("Parsing failed for: `" ++ str ++ "`")

testParserHelpers :: String -> String -> [Instruction] -> IO ()
testParserHelpers str restExpected expressionExpected =
case runParser parseInstructions str of
Just (parsed, rest) -> assertEqual str restExpected rest >>
assertEqual str expressionExpected parsed
Nothing -> assertFailure ("Parsing failed for: `" ++ str ++ "`")

utParserLvt :: TestTree
utParserLvt = testGroup "Parse Lvt"
[
Expand Down Expand Up @@ -59,17 +66,25 @@ utParserLvt = testGroup "Parse Lvt"
, testCase "condition if" $
testParserHelper "if (a)\n{\nb(0);\n};\n"
""
(Cond ((Var "a"), [Function ("b", [Integer 0])], []))
(Cond (Var "a", [Function ("b", [Integer 0])], []))
, testCase "condition if else" $
testParserHelper "if (a)\n{\nb(0);\n}\nelse\n{\nc(0);\n};\n"
""
(Cond ((Var "a"), [Function ("b", [Integer 0])], [Function ("c", [Integer 0])]))
(Cond (Var "a", [Function ("b", [Integer 0])], [Function ("c", [Integer 0])]))
, testCase "condition if with indent" $
testParserHelper "if (a)\n{\n b(0);\n};\n"
""
(Cond ((Var "a"), [Function ("b", [Integer 0])], []))
(Cond (Var "a", [Function ("b", [Integer 0])], []))
, testCase "condition if else with indent" $
testParserHelper "if (a)\n{\n b(0);\n}\nelse\n{\n c(0);\n};\n"
""
(Cond ((Var "a"), [Function ("b", [Integer 0])], [Function ("c", [Integer 0])]))
(Cond (Var "a", [Function ("b", [Integer 0])], [Function ("c", [Integer 0])]))
, testCase "test multiple instruction" $
testParserHelpers "@Int a = 0;\n @Int c = b(a);\n if (c)\n {\n d(a);\n };\n"
""
[
Declaration (("a", "Int"), Integer 0),
Declaration (("c", "Int"), FuncValue ("b", [Var "a"])),
Cond (Var "c", [Function ("d", [Var "a"])], [])
]
]

0 comments on commit 34071e9

Please sign in to comment.