initial commit

This commit is contained in:
Art 2023-01-13 19:26:20 +01:00
commit 4dcefea895
Signed by: prod2
GPG Key ID: F3BB5A97A70A8DDE
43 changed files with 868 additions and 0 deletions

0
.gitignore vendored Normal file
View File

257
Program.fs Normal file
View File

@ -0,0 +1,257 @@
(* FSKalc, a simple calculator implemented as a tree-walker interpreter *)
open FParsec
open System
(* Lexer *)
let manyCharsBetween popen pclose pchar = popen >>? manyCharsTill pchar pclose
let anyStringBetween popen pclose = manyCharsBetween popen pclose anyChar
let pcomment: Parser<unit, unit> = (skipString "(*" |> anyStringBetween <| skipString "*)") |>> ignore
//let pwhitespace: Parser<unit, unit> = (pcomment <|> spaces) |> many1 |>> ignore
let pwhitespace = spaces
let pnumber: Parser<double, unit> = pfloat .>> pwhitespace
let pidentifier: Parser<string, unit> =
let isIdentChar c = isLetter c || c = '_'
many1SatisfyL isIdentChar "identifier" .>> pwhitespace
type Symbol =
| Caret
| Minus
| Plus
| Slash
| Star
| SlashSlash
| Percent
let pleftparen = skipString "(" .>> pwhitespace
let prightparen = skipString ")" .>> pwhitespace
let pequal = skipString "=" .>> pwhitespace
let ppower = stringReturn "^" <| Caret .>> pwhitespace
let pminus = stringReturn "-" <| Minus .>> pwhitespace
let pplus = stringReturn "+" <| Plus .>> pwhitespace
let pstar = stringReturn "*" <| Star .>> pwhitespace
let pslashslash = skipString "/" >>? (stringReturn "/" <| SlashSlash .>> pwhitespace)
let pslash = stringReturn "/" <| Slash .>> pwhitespace
let ppercent = stringReturn "%" <| Percent .>> pwhitespace
(* Parser
- expressions prefixed by 'e'
- statements prefixed by 's'
*)
// EXPRESSIONS
type Expression =
| Number of double
| VarGet of string
| Grouping of Expression list
| Power of Expression * List<Expression>
| Negate of Expression
| Factor of Expression * List<Symbol * Expression>
| Term of Expression * List<Symbol * Expression>
let expr, exprref = createParserForwardedToRef()
// literals and function call
let enumber = pnumber |>> Number
let evarget = pidentifier |>> VarGet
// parentheses
let egrouping = pleftparen >>. (many1 expr) .>> prightparen |>> Grouping
let primary = enumber <|> evarget <|> egrouping
// power
let epower = choice [
primary .>>.? many1 (ppower >>. primary) |>> Power
primary
]
// unary
let enegate = choice [
pminus >>? epower |>> Negate
epower
]
// factor
let pfactorop = pstar <|> pslashslash <|> pslash <|> ppercent
let efactor = choice [
enegate .>>.? many1 (pfactorop .>>. enegate) |>> Factor
enegate
]
let ptermop = pplus <|> pminus
let eterm = choice [
efactor .>>.? many1 (ptermop .>>. efactor) |>> Term
efactor
]
do exprref := eterm
// STATEMENTS
type Statement =
| ExprStatement of Expression
| VarSet of string * Expression
| FuncDef of string * List<string> * Expression
let sexprstmt = expr |>> ExprStatement
let sfuncdef = pidentifier .>>.? ((many1 pidentifier) .>>. (pequal >>. expr)) |>> (fun (a, (b, c)) -> FuncDef (a, b, c))
let svarset = pidentifier .>>.? (pequal >>. expr) |>> VarSet
let stmt = choice [
sfuncdef // first, so it falls through if multiple args not provided
svarset // second so it falls through if no =
sexprstmt
]
// REPL oriented => only 1 statement at once
let program = pwhitespace >>. stmt
type Value =
| Number of double
| Native of string
| Function of List<string> * Expression
| Fail of string
// Store global variables
let mutable globals: Collections.Generic.Dictionary<string, Value> = new Collections.Generic.Dictionary<string, Value>()
// Native/builtin functions
globals["sin"] <- Native "sin"
globals["cos"] <- Native "cos"
globals["tan"] <- Native "tan"
globals["arccos"] <- Native "arccos"
globals["arcsin"] <- Native "arcsin"
globals["arctan"] <- Native "arctan"
globals["sqrt"] <- Native "sqrt"
globals["log"] <- Native "log"
globals["ln"] <- Native "ln"
globals["exp"] <- Native "exp"
// native values
globals["pi"] <- Number Math.PI
globals["tau"] <- Number Math.Tau
globals["e"] <- Number Math.E
globals["inf"] <- Number infinity
globals["nan"] <- Number nan
globals["ans"] <- Number 0
// exec
let varGet key =
let suc, value = globals.TryGetValue(key)
match suc with
| true -> value
| false -> $"Attempt to get the value of undefined global variable {key}." |> Fail
let applyOp op left right =
match op, left, right with
| Plus, Number x, Number y -> Number (x + y)
| Minus, Number x, Number y -> Number (x - y)
| Star, Number x, Number y -> Number (x * y)
| Slash, Number x, Number y -> Number (x / y)
| Percent, Number x, Number y -> Number (x % y)
| SlashSlash, Number x, Number y -> Number (floor x / y)
| Caret, Number x, Number y -> Number (x ** y)
| _ -> Fail $"Invalid operation {op} on {left} and {right}."
let negate value =
match value with
| Number x -> Number -x
| _ -> Fail $"Attempt to negate invalid type {value}."
let rec execExpr expr =
match expr with
| Expression.Number num -> Number num
| VarGet key -> varGet key
| Factor (left, rights)
| Term (left, rights) ->
// left associative ops
let mutable res = execExpr left
for (op, right) in rights do
res <- execExpr right |> applyOp op res
res
| Negate expr -> negate <| execExpr expr
| Power (left, rights) ->
// right associative ops
// parser only creates a power node if rights contains at least 1 element
let mutable res = execExpr rights[rights.Length - 1]
let mutable x = rights.Length - 2
while x > 0 do
res <- applyOp Caret (execExpr rights[x]) res
x <- x - 1
applyOp Caret (execExpr left) res
| Grouping exprs ->
match exprs.Length with
| 1 -> execExpr exprs.Head
| 0 -> Fail "() is an invalid expression"
| _ ->
let func = exprs.Head |> execExpr
let args = exprs.Tail |> List.map execExpr
match func with
| Function (parameters, f) ->
// function call
let argLen = args.Length
let paramLen = parameters.Length
if paramLen <> argLen then
Fail $"Invalid number of arguments, expected {paramLen}, got {argLen}"
else
List.iter2 (fun k v -> globals[k] <- v) parameters args
execExpr f
| Native n ->
// native call TODO
func
| _ -> Fail $"Attempt to call an invalid type {func}"
let printValue value =
match value with
| Number x -> printfn "%A" x
| _ -> printfn "%A" value
let execStmt stmt =
match stmt with
| ExprStatement expr ->
let res = execExpr expr
globals["ans"] <- res
printValue res
| VarSet (name, expr) ->
let res = execExpr expr
globals[name] <- res
printValue res
| FuncDef (name, parameters, expr) -> globals[name] <- Function (parameters, expr)
printfn "FSKalc"
while true do
let source = Console.ReadLine ()
match run program source with
| Success(result, _, _) ->
execStmt result
| Failure(errorMsg, _, _) -> printfn "Parser error: %s" errorMsg

112
Readme.md Normal file
View File

@ -0,0 +1,112 @@
# Reference
The following is an informal overview of FSKalc's capabilties.
## Expressions
### Number literal
Example:
```
8.5
```
### Variable read
Example:
```
a
```
Will print an error message if variable is undefined. The `ans` variable implicitly refers to the result of the last expression statement.
### Parentheses for precedence
Example:
```
(5+6)*7
```
Parentheses increase precedence.
### Parentheses for function calls
Parentheses can also represent function calls, if they contain more than one element (separated by a space).
Example:
```
(sin 50)
```
### Arithmetic operators
The following operators are valid, in decreasing precedence:
- `^` power; right associative
- `-` unary negation; note that multiple negations next to eachother are invalid!
- factor precedence:
- `*` multiplication; left associative
- `/` division; left associative
- `//` integer (flooring) division; left associative
- `%` modulo; left associative
- term precedence:
- `+` addition; left associative
- `-` subtraction; left associative
## Statements
Statements are the top level construct. Every line in an FSKalc program has to be a statement.
### Expression statement
Any valid expression is also a valid statement. The result of expression statements is printed to the screen, and also assigned to the variable names `ans`.
### Variable assignments
Variable assignments have the following syntax:
```
identifier = expression
```
Where the identifier is a string of characters containing only letters and underscores.
Existing variables or functions can be overwritten by new variables/functions.
### Function declaration
Function declaration has the following syntax, demonstrated by an example below.
```
double x = x * 2
```
Warning! as there are no scopes in FSKalc, passing
arguments to functions will modify the global scope.
## Builtins
### Builtin Constants
- pi
- tau (pi * 2)
- e (euler's number)
- inf (infinity)
- nan (not a number)
### Builtin Functions
- sin, cos, tan - they take 1 argument, in radians
- arcsin, arccos, arctan - they take 1 argument, they return in radians
- sqrt - returns square root, optional second argument is the power, default of 2
- log - logarithm, optional second argument is the base, default of 10
- ln - natural logarithm
- exp - returns e to the power of the argument
## Comments
Comments can be inside matching `(*`, `*)` parentheses.

BIN
bin/Debug/net6.0/FParsec.dll Executable file

Binary file not shown.

BIN
bin/Debug/net6.0/FParsecCS.dll Executable file

Binary file not shown.

BIN
bin/Debug/net6.0/FSharp.Core.dll Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bin/Debug/net6.0/fskalc Executable file

Binary file not shown.

View File

@ -0,0 +1,105 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"fskalc/1.0.0": {
"dependencies": {
"FParsec": "1.1.1",
"FSharp.Core": "6.0.1"
},
"runtime": {
"fskalc.dll": {}
}
},
"FParsec/1.1.1": {
"dependencies": {
"FSharp.Core": "6.0.1"
},
"runtime": {
"lib/netstandard2.0/FParsec.dll": {
"assemblyVersion": "1.1.1.0",
"fileVersion": "1.1.1.0"
},
"lib/netstandard2.0/FParsecCS.dll": {
"assemblyVersion": "1.1.1.0",
"fileVersion": "1.1.1.0"
}
}
},
"FSharp.Core/6.0.1": {
"runtime": {
"lib/netstandard2.1/FSharp.Core.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.121.52202"
}
},
"resources": {
"lib/netstandard2.1/cs/FSharp.Core.resources.dll": {
"locale": "cs"
},
"lib/netstandard2.1/de/FSharp.Core.resources.dll": {
"locale": "de"
},
"lib/netstandard2.1/es/FSharp.Core.resources.dll": {
"locale": "es"
},
"lib/netstandard2.1/fr/FSharp.Core.resources.dll": {
"locale": "fr"
},
"lib/netstandard2.1/it/FSharp.Core.resources.dll": {
"locale": "it"
},
"lib/netstandard2.1/ja/FSharp.Core.resources.dll": {
"locale": "ja"
},
"lib/netstandard2.1/ko/FSharp.Core.resources.dll": {
"locale": "ko"
},
"lib/netstandard2.1/pl/FSharp.Core.resources.dll": {
"locale": "pl"
},
"lib/netstandard2.1/pt-BR/FSharp.Core.resources.dll": {
"locale": "pt-BR"
},
"lib/netstandard2.1/ru/FSharp.Core.resources.dll": {
"locale": "ru"
},
"lib/netstandard2.1/tr/FSharp.Core.resources.dll": {
"locale": "tr"
},
"lib/netstandard2.1/zh-Hans/FSharp.Core.resources.dll": {
"locale": "zh-Hans"
},
"lib/netstandard2.1/zh-Hant/FSharp.Core.resources.dll": {
"locale": "zh-Hant"
}
}
}
}
},
"libraries": {
"fskalc/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"FParsec/1.1.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Wdjf/gCNLEwd+0nUCDh9jAIIcKGwfhRramySTnTcVVgNC6i4Vp5aJklUJJfvFkEZMYNZEDGcI8pCa36/TmwmSg==",
"path": "fparsec/1.1.1",
"hashPath": "fparsec.1.1.1.nupkg.sha512"
},
"FSharp.Core/6.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VrFAiW8dEEekk+0aqlbvMNZzDvYXmgWZwAt68AUBqaWK8RnoEVUNglj66bZzhs4/U63q0EfXlhcEKnH1sTYLjw==",
"path": "fsharp.core/6.0.1",
"hashPath": "fsharp.core.6.0.1.nupkg.sha512"
}
}
}

BIN
bin/Debug/net6.0/fskalc.dll Normal file

Binary file not shown.

BIN
bin/Debug/net6.0/fskalc.pdb Normal file

Binary file not shown.

View File

@ -0,0 +1,9 @@
{
"runtimeOptions": {
"tfm": "net6.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "6.0.0"
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

16
fskalc.fsproj Normal file
View File

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="FParsec" Version="1.1.1" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,3 @@
namespace Microsoft.BuildSettings
[<System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")>]
do ()

BIN
obj/Debug/net6.0/apphost Executable file

Binary file not shown.

View File

@ -0,0 +1,17 @@
// <auto-generated>
// Generated by the FSharp WriteCodeFragment class.
// </auto-generated>
namespace FSharp
open System
open System.Reflection
[<assembly: System.Reflection.AssemblyCompanyAttribute("fskalc")>]
[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")>]
[<assembly: System.Reflection.AssemblyProductAttribute("fskalc")>]
[<assembly: System.Reflection.AssemblyTitleAttribute("fskalc")>]
[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
do()

View File

@ -0,0 +1 @@
719d6f669f60db5bd4161506767f868cd97c08d5

Binary file not shown.

BIN
obj/Debug/net6.0/fskalc.dll Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
9c3606c6ecc21eb075ffee173f98574fdcf82504

View File

@ -0,0 +1,28 @@
/home/user/Projects/fskalc/bin/Debug/net6.0/fskalc
/home/user/Projects/fskalc/bin/Debug/net6.0/fskalc.deps.json
/home/user/Projects/fskalc/bin/Debug/net6.0/fskalc.runtimeconfig.json
/home/user/Projects/fskalc/bin/Debug/net6.0/fskalc.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/fskalc.pdb
/home/user/Projects/fskalc/bin/Debug/net6.0/FParsec.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/FParsecCS.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/FSharp.Core.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/cs/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/de/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/es/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/fr/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/it/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/ja/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/ko/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/pl/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/pt-BR/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/ru/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/tr/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/zh-Hans/FSharp.Core.resources.dll
/home/user/Projects/fskalc/bin/Debug/net6.0/zh-Hant/FSharp.Core.resources.dll
/home/user/Projects/fskalc/obj/Debug/net6.0/fskalc.fsproj.AssemblyReference.cache
/home/user/Projects/fskalc/obj/Debug/net6.0/fskalc.AssemblyInfoInputs.cache
/home/user/Projects/fskalc/obj/Debug/net6.0/fskalc.AssemblyInfo.fs
/home/user/Projects/fskalc/obj/Debug/net6.0/fskalc.fsproj.CopyComplete
/home/user/Projects/fskalc/obj/Debug/net6.0/fskalc.dll
/home/user/Projects/fskalc/obj/Debug/net6.0/fskalc.pdb
/home/user/Projects/fskalc/obj/Debug/net6.0/fskalc.genruntimeconfig.cache

View File

@ -0,0 +1 @@
7cbcffe61caa53aa4f0b958aa92747135212da88

BIN
obj/Debug/net6.0/fskalc.pdb Normal file

Binary file not shown.

2
obj/fsac.cache Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,68 @@
{
"format": 1,
"restore": {
"/home/user/Projects/fskalc/fskalc.fsproj": {}
},
"projects": {
"/home/user/Projects/fskalc/fskalc.fsproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/user/Projects/fskalc/fskalc.fsproj",
"projectName": "fskalc",
"projectPath": "/home/user/Projects/fskalc/fskalc.fsproj",
"packagesPath": "/home/user/.nuget/packages/",
"outputPath": "/home/user/Projects/fskalc/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/user/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {}
}
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"FParsec": {
"target": "Package",
"version": "[1.1.1, )",
"generatePathProperty": true
},
"FSharp.Core": {
"include": "Runtime, Compile, Build, Native, Analyzers, BuildTransitive",
"target": "Package",
"version": "[6.0.1, )",
"generatePathProperty": true
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib64/dotnet/sdk/6.0.112/RuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/user/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/user/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.0.3</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/home/user/.nuget/packages/" />
</ItemGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<PkgFSharp_Core Condition=" '$(PkgFSharp_Core)' == '' ">/home/user/.nuget/packages/fsharp.core/6.0.1</PkgFSharp_Core>
<PkgFParsec Condition=" '$(PkgFParsec)' == '' ">/home/user/.nuget/packages/fparsec/1.1.1</PkgFParsec>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />

216
obj/project.assets.json Normal file
View File

@ -0,0 +1,216 @@
{
"version": 3,
"targets": {
"net6.0": {
"FParsec/1.1.1": {
"type": "package",
"dependencies": {
"FSharp.Core": "4.3.4"
},
"compile": {
"lib/netstandard2.0/FParsec.dll": {},
"lib/netstandard2.0/FParsecCS.dll": {}
},
"runtime": {
"lib/netstandard2.0/FParsec.dll": {},
"lib/netstandard2.0/FParsecCS.dll": {}
}
},
"FSharp.Core/6.0.1": {
"type": "package",
"compile": {
"lib/netstandard2.1/FSharp.Core.dll": {}
},
"runtime": {
"lib/netstandard2.1/FSharp.Core.dll": {}
},
"resource": {
"lib/netstandard2.1/cs/FSharp.Core.resources.dll": {
"locale": "cs"
},
"lib/netstandard2.1/de/FSharp.Core.resources.dll": {
"locale": "de"
},
"lib/netstandard2.1/es/FSharp.Core.resources.dll": {
"locale": "es"
},
"lib/netstandard2.1/fr/FSharp.Core.resources.dll": {
"locale": "fr"
},
"lib/netstandard2.1/it/FSharp.Core.resources.dll": {
"locale": "it"
},
"lib/netstandard2.1/ja/FSharp.Core.resources.dll": {
"locale": "ja"
},
"lib/netstandard2.1/ko/FSharp.Core.resources.dll": {
"locale": "ko"
},
"lib/netstandard2.1/pl/FSharp.Core.resources.dll": {
"locale": "pl"
},
"lib/netstandard2.1/pt-BR/FSharp.Core.resources.dll": {
"locale": "pt-BR"
},
"lib/netstandard2.1/ru/FSharp.Core.resources.dll": {
"locale": "ru"
},
"lib/netstandard2.1/tr/FSharp.Core.resources.dll": {
"locale": "tr"
},
"lib/netstandard2.1/zh-Hans/FSharp.Core.resources.dll": {
"locale": "zh-Hans"
},
"lib/netstandard2.1/zh-Hant/FSharp.Core.resources.dll": {
"locale": "zh-Hant"
}
},
"contentFiles": {
"contentFiles/any/any/_._": {
"buildAction": "None",
"codeLanguage": "any",
"copyToOutput": false
}
}
}
}
},
"libraries": {
"FParsec/1.1.1": {
"sha512": "Wdjf/gCNLEwd+0nUCDh9jAIIcKGwfhRramySTnTcVVgNC6i4Vp5aJklUJJfvFkEZMYNZEDGcI8pCa36/TmwmSg==",
"type": "package",
"path": "fparsec/1.1.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"fparsec.1.1.1.nupkg.sha512",
"fparsec.nuspec",
"lib/net45/FParsec.dll",
"lib/net45/FParsec.pdb",
"lib/net45/FParsec.xml",
"lib/net45/FParsecCS.dll",
"lib/net45/FParsecCS.pdb",
"lib/net45/FParsecCS.xml",
"lib/netstandard2.0/FParsec.dll",
"lib/netstandard2.0/FParsec.pdb",
"lib/netstandard2.0/FParsec.xml",
"lib/netstandard2.0/FParsecCS.dll",
"lib/netstandard2.0/FParsecCS.pdb",
"lib/netstandard2.0/FParsecCS.xml"
]
},
"FSharp.Core/6.0.1": {
"sha512": "VrFAiW8dEEekk+0aqlbvMNZzDvYXmgWZwAt68AUBqaWK8RnoEVUNglj66bZzhs4/U63q0EfXlhcEKnH1sTYLjw==",
"type": "package",
"path": "fsharp.core/6.0.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"contentFiles/any/netstandard2.0/FSharp.Core.xml",
"contentFiles/any/netstandard2.1/FSharp.Core.xml",
"fsharp.core.6.0.1.nupkg.sha512",
"fsharp.core.nuspec",
"lib/netstandard2.0/FSharp.Core.dll",
"lib/netstandard2.0/FSharp.Core.xml",
"lib/netstandard2.0/cs/FSharp.Core.resources.dll",
"lib/netstandard2.0/de/FSharp.Core.resources.dll",
"lib/netstandard2.0/es/FSharp.Core.resources.dll",
"lib/netstandard2.0/fr/FSharp.Core.resources.dll",
"lib/netstandard2.0/it/FSharp.Core.resources.dll",
"lib/netstandard2.0/ja/FSharp.Core.resources.dll",
"lib/netstandard2.0/ko/FSharp.Core.resources.dll",
"lib/netstandard2.0/pl/FSharp.Core.resources.dll",
"lib/netstandard2.0/pt-BR/FSharp.Core.resources.dll",
"lib/netstandard2.0/ru/FSharp.Core.resources.dll",
"lib/netstandard2.0/tr/FSharp.Core.resources.dll",
"lib/netstandard2.0/zh-Hans/FSharp.Core.resources.dll",
"lib/netstandard2.0/zh-Hant/FSharp.Core.resources.dll",
"lib/netstandard2.1/FSharp.Core.dll",
"lib/netstandard2.1/FSharp.Core.xml",
"lib/netstandard2.1/cs/FSharp.Core.resources.dll",
"lib/netstandard2.1/de/FSharp.Core.resources.dll",
"lib/netstandard2.1/es/FSharp.Core.resources.dll",
"lib/netstandard2.1/fr/FSharp.Core.resources.dll",
"lib/netstandard2.1/it/FSharp.Core.resources.dll",
"lib/netstandard2.1/ja/FSharp.Core.resources.dll",
"lib/netstandard2.1/ko/FSharp.Core.resources.dll",
"lib/netstandard2.1/pl/FSharp.Core.resources.dll",
"lib/netstandard2.1/pt-BR/FSharp.Core.resources.dll",
"lib/netstandard2.1/ru/FSharp.Core.resources.dll",
"lib/netstandard2.1/tr/FSharp.Core.resources.dll",
"lib/netstandard2.1/zh-Hans/FSharp.Core.resources.dll",
"lib/netstandard2.1/zh-Hant/FSharp.Core.resources.dll"
]
}
},
"projectFileDependencyGroups": {
"net6.0": [
"FParsec >= 1.1.1",
"FSharp.Core >= 6.0.1"
]
},
"packageFolders": {
"/home/user/.nuget/packages/": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/user/Projects/fskalc/fskalc.fsproj",
"projectName": "fskalc",
"projectPath": "/home/user/Projects/fskalc/fskalc.fsproj",
"packagesPath": "/home/user/.nuget/packages/",
"outputPath": "/home/user/Projects/fskalc/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/user/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {}
}
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"FParsec": {
"target": "Package",
"version": "[1.1.1, )",
"generatePathProperty": true
},
"FSharp.Core": {
"include": "Runtime, Compile, Build, Native, Analyzers, BuildTransitive",
"target": "Package",
"version": "[6.0.1, )",
"generatePathProperty": true
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib64/dotnet/sdk/6.0.112/RuntimeIdentifierGraph.json"
}
}
}
}

11
obj/project.nuget.cache Normal file
View File

@ -0,0 +1,11 @@
{
"version": 2,
"dgSpecHash": "4l6UOxegYd/AlKKZN0Nx+31mbNgIst/DZ7BPmEeZ9Mfqz6IZiojaowabHcwu4rLvqV6huq2OUDHkfYqnreIcDA==",
"success": true,
"projectFilePath": "/home/user/Projects/fskalc/fskalc.fsproj",
"expectedPackageFiles": [
"/home/user/.nuget/packages/fparsec/1.1.1/fparsec.1.1.1.nupkg.sha512",
"/home/user/.nuget/packages/fsharp.core/6.0.1/fsharp.core.6.0.1.nupkg.sha512"
],
"logs": []
}