Showing preview only (4,572K chars total). Download the full file or copy to clipboard to get everything.
Repository: stephan-tolksdorf/fparsec
Branch: master
Commit: 156cbd751fac
Files: 176
Total size: 4.3 MB
Directory structure:
gitextract_d9t2bjvu/
├── .gitattributes
├── .github/
│ └── workflows/
│ └── ci.yml
├── .gitignore
├── .vscode/
│ └── tasks.json
├── Build/
│ ├── FParsec.Common.targets
│ ├── fparsec-license.txt
│ └── fparsec.snk
├── Directory.Build.props
├── Doc/
│ ├── html/
│ │ ├── about/
│ │ │ ├── changelog.html
│ │ │ ├── contact.html
│ │ │ ├── fparsec-vs-alternatives.html
│ │ │ ├── index.html
│ │ │ └── status-and-roadmap.html
│ │ ├── css/
│ │ │ ├── print.css
│ │ │ ├── screen-sidebar.css
│ │ │ ├── style-ie.css
│ │ │ ├── style-ie6.css
│ │ │ └── style.css
│ │ ├── download-and-installation.html
│ │ ├── index.html
│ │ ├── license.html
│ │ ├── reference/
│ │ │ ├── charparsers.html
│ │ │ ├── charstream.html
│ │ │ ├── error.html
│ │ │ ├── errormessage.html
│ │ │ ├── errormessagelist.html
│ │ │ ├── index.html
│ │ │ ├── operatorprecedenceparser.html
│ │ │ ├── parser-overview.html
│ │ │ ├── position.html
│ │ │ ├── primitives.html
│ │ │ ├── reply.html
│ │ │ ├── staticmapping.html
│ │ │ └── text.html
│ │ ├── tutorial.html
│ │ └── users-guide/
│ │ ├── applying-parsers-in-sequence.html
│ │ ├── customizing-error-messages.html
│ │ ├── debugging-a-parser.html
│ │ ├── index.html
│ │ ├── internals-of-a-simple-parser-function.html
│ │ ├── looking-ahead-and-backtracking.html
│ │ ├── parser-functions.html
│ │ ├── parsing-alternatives.html
│ │ ├── parsing-sequences.html
│ │ ├── parsing-with-user-state.html
│ │ ├── performance-optimizations.html
│ │ ├── running-parsers-on-input.html
│ │ ├── tips-and-tricks.html
│ │ └── where-is-the-monad.html
│ ├── misc/
│ │ └── removed-many-variants.fs
│ └── src/
│ ├── changelog.txt
│ ├── contact.txt
│ ├── documentation.txt
│ ├── download-and-installation.txt
│ ├── fparsec-vs-alternatives.txt
│ ├── license.txt
│ ├── reference-charparsers.txt
│ ├── reference-charstream.txt
│ ├── reference-error.txt
│ ├── reference-errormessage.txt
│ ├── reference-errormessagelist.txt
│ ├── reference-operatorprecedenceparser.txt
│ ├── reference-overview.txt
│ ├── reference-position.txt
│ ├── reference-primitives.txt
│ ├── reference-reply.txt
│ ├── reference-staticmapping.txt
│ ├── reference-text.txt
│ ├── reference.txt
│ ├── status-and-roadmap.txt
│ ├── template.html
│ ├── tutorial.txt
│ └── users-guide.txt
├── FParsec/
│ ├── AssemblyInfo.fs
│ ├── CharParsers.fs
│ ├── CharParsers.fsi
│ ├── Emit.fs
│ ├── Error.fs
│ ├── Error.fsi
│ ├── FParsec-LowTrust.fsproj
│ ├── FParsec.fsproj
│ ├── FParsec.targets
│ ├── Internals.fs
│ ├── Primitives.fs
│ ├── Primitives.fsi
│ ├── Range.fs
│ ├── StaticMapping.fs
│ └── StaticMapping.fsi
├── FParsec-LowTrust.sln
├── FParsec.sln
├── FParsecCS/
│ ├── Buffer.cs
│ ├── CaseFoldTable.cs
│ ├── CharSet.cs
│ ├── CharStream.cs
│ ├── CharStreamLT.cs
│ ├── Cloning.cs
│ ├── ErrorMessage.cs
│ ├── ErrorMessageList.cs
│ ├── Errors.cs
│ ├── FParsecCS-LowTrust.csproj
│ ├── FParsecCS.csproj
│ ├── FParsecCS.targets
│ ├── FastGenericEqualityERComparer.cs
│ ├── HexFloat.cs
│ ├── IdentifierValidator.cs
│ ├── ManyChars.cs
│ ├── OperatorPrecedenceParser.cs
│ ├── Position.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── Reply.cs
│ ├── StringBuffer.cs
│ ├── Strings.cs
│ └── Text.cs
├── NuGet.config
├── Samples/
│ ├── Calculator/
│ │ ├── Calculator-LowTrust.fsproj
│ │ ├── Calculator.fsproj
│ │ ├── Calculator.targets
│ │ ├── InterpLexYacc-LowTrust.fsproj
│ │ └── calculator.fs
│ ├── FSharpParsingSample/
│ │ ├── FParsecVersion/
│ │ │ ├── InterpFParsec-LowTrust.fsproj
│ │ │ ├── InterpFParsec.fsproj
│ │ │ ├── InterpFParsec.targets
│ │ │ ├── main.fs
│ │ │ └── parser.fs
│ │ ├── LexYaccVersion/
│ │ │ ├── Doc.html
│ │ │ ├── InterpLexYacc.fsproj
│ │ │ ├── ast.fs
│ │ │ ├── interp.fs
│ │ │ ├── lex.fs
│ │ │ ├── lex.fsl
│ │ │ ├── main.fs
│ │ │ ├── pars.fs
│ │ │ ├── pars.fsi
│ │ │ ├── pars.fsy
│ │ │ └── test.lang
│ │ └── readme.txt
│ ├── JSON/
│ │ ├── JsonParser-LowTrust.fsproj
│ │ ├── JsonParser.fsproj
│ │ ├── JsonParser.targets
│ │ ├── PegParser-LowTrust.fsproj
│ │ ├── ast.fs
│ │ ├── main.fs
│ │ ├── parser.fs
│ │ └── test_json.txt
│ ├── PEG/
│ │ ├── PegParser-LowTrust.fsproj
│ │ ├── PegParser.fsproj
│ │ ├── PegParser.targets
│ │ ├── ast.fs
│ │ ├── main.fs
│ │ ├── parser.fs
│ │ └── test_peg.txt
│ └── Tutorial/
│ ├── Tutorial-LowTrust.fsproj
│ ├── Tutorial.fsproj
│ ├── Tutorial.targets
│ └── tutorial.fs
├── Test/
│ ├── AllTests.fs
│ ├── BufferTests.fs
│ ├── CharParsersTests.fs
│ ├── CharSetTests.fs
│ ├── CharStreamTests.fs
│ ├── CloningTests.fs
│ ├── HexFloatTests.fs
│ ├── IdentifierValidatorTests.fs
│ ├── OperatorPrecedenceParserTests.fs
│ ├── PrimitivesTests.fs
│ ├── RangeTests.fs
│ ├── StaticMappingTests.fs
│ ├── StringBufferTests.fs
│ ├── Test-LowTrust.fsproj
│ ├── Test.fs
│ ├── Test.fsproj
│ ├── Test.targets
│ └── TextTests.fs
├── global.json
├── pack.ps1
└── readme.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
* text=auto
*.cs text diff=csharp
*.fs text diff=csharp
*.fsi text diff=csharp
*.fsx text diff=csharp
*.sln text eol=crlf
*.csproj text
*.fsproj text
*.config text
*.json text
*.txt text
*.html text linguist-documentation
*.css text linguist-documentation
*.jpg binary
*.png binary
*.gif binary
================================================
FILE: .github/workflows/ci.yml
================================================
name: Build and test
on:
push:
branches: [master]
pull_request:
jobs:
build-and-test-low-trust:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
global-json-file: global.json
- name: Build Low-Trust version
run: dotnet build Test/Test-LowTrust.fsproj -c Release-LowTrust -p:Platform=AnyCPU
- name: Test Low-Trust version
run: dotnet run --no-build --project Test/Test-LowTrust.fsproj -c Release-LowTrust -p:Platform=AnyCPU
- name: Build samples for Low-Trust version
run: dotnet build FParsec-LowTrust.sln -c Release-LowTrust -p:Platform=AnyCPU
build-and-test-non-low-trust:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
- name: Build non-Low-Trust version
run: dotnet build Test/Test.fsproj -c Release -p:Platform=AnyCPU
- name: Test non-Low-Trust version
run: dotnet run --no-build --project Test/Test.fsproj -c Release -p:Platform=AnyCPU
- name: Build samples for non-Low-Trust version
run: dotnet build FParsec.sln -c Release -p:Platform=AnyCPU
================================================
FILE: .gitignore
================================================
Thumbs.db
Build/bin/
Unused/*
bin/
obj/
*.user
*.suo
*.pyc
*~
*.asv
*.swp
*.pdb
packages/
version.props
/.vs/
.idea
.DS_Store
================================================
FILE: .vscode/tasks.json
================================================
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Build Test (Config: Debug-LowTrust)",
"command": "dotnet build Test/Test.fsproj -c Debug-LowTrust -p:Platform=AnyCPU",
"type": "shell",
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
},
{
"label": "Build All (Config: Debug-LowTrust)",
"command": "dotnet build FParsec.sln -c Debug-LowTrust -p:Platform=AnyCPU",
"type": "shell",
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
},
{
"label": "Test (Config: Debug-LowTrust)",
"dependsOn": ["Build Test (Config: Debug-LowTrust)"],
"command": "'Test/bin/Any CPU/Debug-LowTrust/net6/Test'",
"type": "shell",
"group": "test",
"presentation": {
"reveal": "always"
},
"problemMatcher": "$msCompile"
}
]
}
================================================
FILE: Build/FParsec.Common.targets
================================================
<Project>
<PropertyGroup Condition="'$(PlatformTarget)' == ''">
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition="'$(LowTrust)' == 'true'">
<DefineConstants>$(DefineConstants);SMALL_STATETAG</DefineConstants>
</PropertyGroup>
<PropertyGroup>
<DefineConstants>$(DefineConstants);AGGRESSIVE_INLINING</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net45'">
<DefineConstants>$(DefineConstants);UNALIGNED_READS</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(FParsecNuGet)' == 'true'">
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>
<ItemGroup Condition="'$(FParsecNuGet)' == 'true'">
<None Include="$(MSBuildThisFileDirectory)\fparsec-license.txt" Pack="true" PackagePath="LICENSE.txt" />
</ItemGroup>
<PropertyGroup Condition="'$(FParsecNuGet)' == 'true'">
<SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup Condition="'$(SignAssembly)' == 'true'">
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)\fparsec.snk</AssemblyOriginatorKeyFile>
<DefineConstants>$(DefineConstants);STRONG_NAME</DefineConstants>
</PropertyGroup>
</Project>
================================================
FILE: Build/fparsec-license.txt
================================================
The FParsec library in source and binary form is distributed under the Simplified BSD License. The Simplified BSD License (a.k.a. “2‐clause BSD License”) is a simple, permissive license that is OSI‐compliant.
FParsec incorporates data derived from the Unicode Character Database v. 8.0.0, Copyright (c) 1991‒2015 Unicode, Inc., which is distributed under the following terms:
http://www.unicode.org/terms_of_use.html#Exhibit1
--
FParsec Simplified BSD License
Copyright (c) 2007‒2022, Stephan Tolksdorf. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
This software is provided by the copyright holders “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright holders be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
================================================
FILE: Directory.Build.props
================================================
<Project ToolsVersion="15.0">
<PropertyGroup>
<Configurations>Debug;Release;Debug-LowTrust;Release-LowTrust</Configurations>
</PropertyGroup>
<PropertyGroup>
<LowTrust>false</LowTrust>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug-LowTrust' or '$(Configuration)' == 'Release-LowTrust'">
<LowTrust>true</LowTrust>
<DefineConstants>$(DefineConstants);LOW_TRUST</DefineConstants>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup>
<DisableImplicitConfigurationDefines>true</DisableImplicitConfigurationDefines>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug' or '$(Configuration)' == 'Debug-LowTrust'">
<Optimize>false</Optimize>
<DefineConstants>$(DefineConstants);DEBUG</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release' or '$(Configuration)' == 'Release-LowTrust'">
<Optimize>true</Optimize>
<DefineConstants>$(DefineConstants);RELEASE</DefineConstants>
</PropertyGroup>
<PropertyGroup>
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
<PropertyGroup>
<VersionPrefix>2.0.0</VersionPrefix>
<Authors>Stephan Tolksdorf</Authors>
<Copyright>Copyright © Stephan Tolksdorf</Copyright>
<Product>FParsec</Product>
<PackageProjectUrl>http://www.quanttec.com/fparsec/</PackageProjectUrl>
<RepositoryUrl>https://github.com/stephan-tolksdorf/fparsec</RepositoryUrl>
</PropertyGroup>
</Project>
================================================
FILE: Doc/html/about/changelog.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Changelog</title>
<link rel="stylesheet" type="text/css" media="all" href="../css/style.css" />
<link rel="stylesheet" type="text/css" media="screen" href="../css/screen-sidebar.css" />
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="../css/style-ie.css" />
<![endif]-->
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="all" href="../css/style-ie6.css" />
<![endif]-->
<link rel="stylesheet" type="text/css" media="print" href="../css/print.css" />
</head>
<body>
<div id="fixed-layer">
<div id="fixed-wrapper">
<div id="sidebar">
<div id="top-links"><span><a href="https://github.com/stephan-tolksdorf/fparsec">FParsec @ GitHub</a> | <a href="https://github.com/stephan-tolksdorf/fparsec/issues">Report a bug</a> | <a href="mailto:fparsec [at] quanttec.com?subject=FParsec&body=Hi Stephan,%0A%0A[your feedback]">Feedback</a></span></div>
<div id="nav-tree">
<table class="nav n1">
<tbody class="nav-open n1">
<tr class="nav-entry n1 _1">
<td class="nav-number n1"></td>
<td class="nav-title n1"><a href="../index.html">FParsec Documentation</a></td>
</tr>
<tr class="nav-subentries n1 _1">
<td class="nav-subentries-number n1"></td>
<td class="nav-subentries n1">
<table class="nav n2">
<tbody class="nav-open n2">
<tr class="nav-entry n2 _1">
<td class="nav-number n2"><a href="index.html"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="index.html">About FParsec</a></td>
</tr>
<tr class="nav-subentries n2 _1">
<td class="nav-subentries-number n2"></td>
<td class="nav-subentries n2">
<table class="nav n3">
<tbody class="nav-before-open n3">
<tr class="nav-entry n3 _1">
<td class="nav-number n3">
<a href="fparsec-vs-alternatives.html"><span class="section-number">1</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n3"><a href="fparsec-vs-alternatives.html">FParsec vs alternatives</a></td>
</tr>
<tr class="nav-entry n3 _2">
<td class="nav-number n3">
<a href="status-and-roadmap.html"><span class="section-number">2</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n3"><a href="status-and-roadmap.html">Status and roadmap</a></td>
</tr>
</tbody>
<tbody class="nav-open selected n3">
<tr class="nav-entry selected n3 _3">
<td class="nav-number selected n3"><a href="#"><span class="section-number">3</span><span class="nav-space"></span></a></td>
<td class="nav-title selected n3"><a href="#">Changelog</a></td>
</tr>
<tr class="nav-subentries selected n3 _3">
<td class="nav-subentries-number selected n3"></td>
<td class="nav-subentries selected n3">
<table class="nav n4">
<tbody class="nav-before-open n4">
<tr class="nav-entry n4 _1">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v2_0">Version 2.0, 2022‒11‒01</a></td>
</tr>
<tr class="nav-entry n4 _2">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v1_1_1">Version 1.1.1, 2020‒02‒01</a></td>
</tr>
<tr class="nav-entry n4 _3">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v1_1">Version 1.1.0, 2020‒01‒05</a></td>
</tr>
<tr class="nav-entry n4 _4">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v1_0_3">Version 1.0.3, 2017‒08‒20</a></td>
</tr>
<tr class="nav-entry n4 _5">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v1_0_2">Version 1.0.2, 2015‒09‒27</a></td>
</tr>
<tr class="nav-entry n4 _6">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v1_0_1">Version 1.0.1, 2013‒06‒25</a></td>
</tr>
<tr class="nav-entry n4 _7">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v1_0">Version 1.0.0, 2012‒07‒19</a></td>
</tr>
<tr class="nav-entry n4 _8">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_9_2">Version 0.9.2, 2012‒03‒09</a></td>
</tr>
<tr class="nav-entry n4 _9">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_9_1">Version 0.9.1, 2011‒05‒22</a></td>
</tr>
<tr class="nav-entry n4 _0">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_9">Version 0.9.0, 2011‒04‒26</a></td>
</tr>
<tr class="nav-entry n4 _1">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_8_x">Version 0.8.x, no release</a></td>
</tr>
<tr class="nav-entry n4 _2">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_7_3_1">Version 0.7.3.1, 2009‒02‒26</a></td>
</tr>
<tr class="nav-entry n4 _3">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_7_3">Version 0.7.3, 2008‒12‒08</a></td>
</tr>
<tr class="nav-entry n4 _4">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_7_2">Version 0.7.2, 2008‒11‒17</a></td>
</tr>
<tr class="nav-entry n4 _5">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_7_1">Version 0.7.1, 2008‒09‒29</a></td>
</tr>
<tr class="nav-entry n4 _6">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_7_0_1">Version 0.7.0.1, 2008‒09‒23</a></td>
</tr>
<tr class="nav-entry n4 _7">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_7">Version 0.7.0, 2008‒09‒13</a></td>
</tr>
<tr class="nav-entry n4 _8">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_6">Version 0.6.0, 2008‒05‒20</a></td>
</tr>
<tr class="nav-entry n4 _9">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_5_1">Version 0.5.1, 2008‒01‒20</a></td>
</tr>
<tr class="nav-entry n4 _0">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_5">Version 0.5.0, 2008‒01‒15</a></td>
</tr>
<tr class="nav-entry n4 _1">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_4_4">Version 0.4.4, 2008‒01‒13</a></td>
</tr>
<tr class="nav-entry n4 _2">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_4_3">Version 0.4.3, 2008‒01‒12</a></td>
</tr>
<tr class="nav-entry n4 _3">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_4_2">Version 0.4.2, 2008‒01‒04</a></td>
</tr>
<tr class="nav-entry n4 _4">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_4_1">Version 0.4.1, 2008‒01‒02</a></td>
</tr>
<tr class="nav-entry n4 _5">
<td class="nav-number n4"></td>
<td class="nav-title n4"><a href="#v0_4">Version 0.4.0, 2007‒12‒30</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
<tbody class="nav-after-open n3">
<tr class="nav-entry n3 _4">
<td class="nav-number n3"><a href="contact.html"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="contact.html">Contact</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
<tbody class="nav-after-open n2">
<tr class="nav-entry n2 _2">
<td class="nav-number n2"><a href="../license.html"><span class="section-number">2</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../license.html">License</a></td>
</tr>
<tr class="nav-entry n2 _3">
<td class="nav-number n2">
<a href="../download-and-installation.html"><span class="section-number">3</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n2"><a href="../download-and-installation.html">Download and installation</a></td>
</tr>
<tr class="nav-entry n2 _4">
<td class="nav-number n2"><a href="../tutorial.html"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../tutorial.html">Tutorial</a></td>
</tr>
<tr class="nav-entry n2 _5">
<td class="nav-number n2"><a href="../users-guide/index.html"><span class="section-number">5</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../users-guide/index.html">User’s Guide</a></td>
</tr>
<tr class="nav-entry n2 _6">
<td class="nav-number n2"><a href="../reference/index.html"><span class="section-number">6</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../reference/index.html">Reference</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<div id="copyright">
<span>Copyright © 2022 <a href="../about/contact.html">Stephan Tolksdorf</a></span>
</div>
</div>
</div>
</div>
<div id="wrapper">
<div id="main">
<div id="main-content">
<div id="breadcrumbs">
<span class="breadcrumbs">
<span id="breadcrumbs-parents"><a href="../index.html">FParsec Documentation</a><span class="breadcrumbs-sep"> > </span><a href="index.html">About FParsec</a></span><span class="breadcrumbs-sep"> > </span>Changelog
</span>
</div>
<div class="section s2">
<h1 class="title h2"><span>Changelog</span></h1>
<div id="v2_0" class="section s3">
<h2 class="title h3"><span>Version 2.0, 2022‒11‒01</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">Dropped .NET Framework 4.5 support and switched to using .NET 6.</li>
<li class="_2">
Changed NuGet build to always enable code signing. <a href="https://github.com/stephan-tolksdorf/fparsec/pull/55">Contributed</a> by Radek
Krahl – thanks Radek!
</li>
<li class="_3">
Norman Krämer <a href="https://github.com/stephan-tolksdorf/fparsec/pull/54">fixed</a> an error in the <code class="fsharp"><a
href="../reference/charstream.html#CharStream"><span class="ci">CharStream</span></a><span class="cm">.</span><a
href="../reference/charstream.html#CharStream.members.Skip"><span class="ci">Skip</span></a></code> documentation – thanks Norman!
</li>
<li class="_4">
Nathan Adams <a href="https://github.com/stephan-tolksdorf/fparsec/pull/56">fixed</a> a typo in the User’s Guide – thanks Nathan!
</li>
</ul>
</div>
</div>
</div>
<div id="v1_1_1" class="section s3">
<h2 class="title h3"><span>Version 1.1.1, 2020‒02‒01</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
Fixed NuGet build to target the AnyCPU platform instead of the default platform of the build machine. Vadim Slynko and tpisciotta reported this
issue – thanks Vadim and tpisciotta!
</li>
</ul>
</div>
</div>
</div>
<div id="v1_1" class="section s3">
<h2 class="title h3"><span>Version 1.1.0, 2020‒01‒05</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
<strong>Behaviour change</strong>: <code class="fsharp"><a href="../reference/charparsers.html#members.pfloat"><span
class="ci">pfloat</span></a></code> now parses out‐of‐range finite values as plus or minus infinity instead of returning an error. This unifies
the <code class="fsharp"><a href="../reference/charparsers.html#members.pfloat"><span class="ci">pfloat</span></a></code> behaviour on all
platforms after <a
href="https://docs.microsoft.com/en-us/dotnet/core/compatibility/2.2-3.0#floating-point-parsing-operations-no-longer-fail-or-throw-an-overflowexception">the
behaviour change of <code class="fsharp"><span class="ci">System</span><span class="cm">.</span><span class="ci">Double</span><span
class="cm">.</span><span class="ci">Parse</span></code> on .NET Core 3</a>.
</li>
<li class="_2">
Enrico Sada <a href="https://github.com/stephan-tolksdorf/fparsec/pull/38">modernized</a> the F# and C# project files and the build script for
the NuGet packages – thanks Enrico!
</li>
<li class="_3">Added SourceLink support, which was prepared and championed by Cameron Taggart – thanks Cameron!</li>
<li class="_4">
Maxime Didier <a href="https://github.com/stephan-tolksdorf/fparsec/pull/20">fixed</a> a bug in the Low‐Trust version of the <code
class="fsharp"><a href="../reference/charstream.html#CharStream"><span class="ci">CharStream</span></a></code> constructors that accept a file
path argument: The stream’s <code class="fsharp"><a href="../reference/charstream.html#CharStream.members.Name"><span
class="ci">Name</span></a></code> property wasn’t initialized. Thanks Maxime!
</li>
<li class="_5">
Fixed missing parser definitions in the <a href="../tutorial.html#parsing-json">Parsing JSON</a> section of the tutorial spotted by Josh
Quintus – thanks Josh!
</li>
<li class="_6">
Andre Wesseling <a href="https://github.com/stephan-tolksdorf/fparsec/pull/18">fixed</a> a parser definition in the <a
href="../users-guide/where-is-the-monad.html">Where is the monad</a> section of the User’s Guide – thanks Andre!
</li>
<li class="_7">
Frederik K. <a href="https://github.com/stephan-tolksdorf/fparsec/pull/28">fixed</a> an error in the <code class="fsharp"><a
href="../reference/errormessage.html#members.ErrorMessage"><span class="ci">ErrorMessage</span></a></code> documentation – thanks Frederik!
</li>
<li class="_8">
Jonathan Roeber <a href="https://github.com/stephan-tolksdorf/fparsec/pull/40">fixed</a> an error in the <code class="fsharp"><a
href="../reference/charparsers.html#members.previousCharSatisfiesNot"><span class="ci">previousCharSatisfiesNot</span></a></code> – thanks
Jonathan!
</li>
<li class="_9">
Vegard Løkken <a href="https://github.com/stephan-tolksdorf/fparsec/pull/42">fixed</a> an error in the <code class="fsharp"><a
href="../reference/charparsers.html#members.unicodeSpaces"><span class="ci">unicodeSpaces</span></a></code> documentation – thanks Vegard!
</li>
</ul>
</div>
</div>
</div>
<div id="v1_0_3" class="section s3">
<h2 class="title h3"><span>Version 1.0.3, 2017‒08‒20</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
Modern solution and project files for .NET Core and VS 2017 were added to the source folders. Huge thanks to <a
href="https://github.com/neoeinstein">Marcus Griep</a> for spearheading the effort to make FParsec .NET Standard compatible and contributing
the new project and solution files!
</li>
<li class="_2">The old build script for the NuGet packages was replaced by a PowerShell script that uses the new project files.</li>
<li class="_3">The FParsec NuGet package now contains assemblies for .NET Standard 1.6.</li>
<li class="_4">
The non‐netstandard assemblies of FParsec now reference the FSharp.Core 4.0.0.1 NuGet package, which should maximize compatibility when binding
redirects aren’t available.
</li>
<li class="_5">
A <a href="https://github.com/stephan-tolksdorf/fparsec/blob/master/.vscode/tasks.json"><span class="tt">.vscode/tasks.json</span></a> file
with some task definitions for Visual Studio Code was added.
</li>
<li class="_6">The source repository was moved to GitHub.</li>
<li class="_7">
Added a <code class="fsharp"><a href="../reference/charparsers.html#members.stringsSepBy1"><span class="ci">stringsSepBy1</span></a></code>
parser (<a href="https://github.com/stephan-tolksdorf/fparsec/pull/4">contributed by Robin Munn</a> – thanks Robin!).
</li>
<li class="_8">
Added a link to the <a href="http://dmitriyvlasov.ru/publication/fparsec-tutorial/">Russian translation of the tutorial</a> by Dmitry Vlasov –
thanks Dmitry!
</li>
<li class="_9">Fixed documentation typos. One was spotted by Brandon Dimperio, another by ZelteHonor – thanks Brandon and ZelteHonor!</li>
<li class="_0">
Renamed <code class="fsharp"><span class="ci">CLR45</span></code> to <code class="fsharp"><a
href="../download-and-installation.html#configuration-options.AGGRESSIVE_INLINING"><span class="ci">AGGRESSIVE_INLINING</span></a></code> to
better match its purpose.
</li>
</ul>
</div>
</div>
</div>
<div id="v1_0_2" class="section s3">
<h2 class="title h3"><span>Version 1.0.2, 2015‒09‒27</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
replaced all uses of <code class="fsharp"><a href="https://msdn.microsoft.com/en-us/library/hz49h034.aspx"><span class="ci">Char</span><span
class="cm">.</span><span class="ci">GetUnicodeCategory</span></a></code> with <code class="fsharp"><a
href="https://msdn.microsoft.com/en-us/library/h6sx68ke.aspx"><span class="ci">CharCodeInfo</span><span class="cm">.</span><span
class="ci">GetUnicodeCategory</span></a></code>, since the former may or may not track the current Unicode standard and the latter is the only
one supported by the PCL API subset
</li>
<li class="_2">updated the case folding, whitespace and XID property data tables to Unicode 8.0.0</li>
<li class="_3">added a PCL Profile 259 version to the FParsec NuGet package</li>
<li class="_4">removed the Silverlight, VS9 and VS10 solution files and the Mono Makefile</li>
<li class="_5">
updated the Lex & Yacc version of the <span class="tt">FSharpParsingSample</span> to use the <a
href="http://fsprojects.github.io/FsLexYacc/"><code class="fsharp"><span class="ci">FsLexYacc</span></code></a> NuGet packages
</li>
<li class="_6">fixed documentation typos (two were spotted by Francois Nardon and Patrick McDonald – thanks Francois and Patrick!)</li>
</ul>
</div>
</div>
</div>
<div id="v1_0_1" class="section s3">
<h2 class="title h3"><span>Version 1.0.1, 2013‒06‒25</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
The maintainership of the FParsec NuGet package(s) was handed over from Ryan Riley, Huw Simpson, Cameron Taggart and Khan Thompson to Stephan
Tolksdorf. Thanks Ryan, Huw, Cameron and Khan for creating and maintaining the previous versions of the NuGet package!
</li>
<li class="_2">
FParsec now has two <a href="../download-and-installation.html#nuget-packages">NuGet packages</a>, built with a new fsx script
</li>
<li class="_3">
fixed a <a href="https://bitbucket.org/fparsec/main/pull-request/3/bug-fix-use-the-leaveopen-parameter-passed/diff">bug in one of the <code
class="fsharp"><span class="ci">CharStream</span></code> constructors</a> (reported and patched by Andrew Smith – thanks Andrew!)
</li>
<li class="_4">
added <code class="fsharp"><a href="../download-and-installation.html#configuration-options.USE_STATIC_MAPPING_FOR_IS_ANY_OF"><span
class="ci">USE_STATIC_MAPPING_FOR_IS_ANY_OF</span></a></code> and <code class="fsharp"><a
href="../download-and-installation.html#configuration-options.UNALIGNED_READS"><span class="ci">UNALIGNED_READS</span></a></code> as default
compilation options in the Visual Studio projects (the default options now match the ones used by the “Big Data edition” NuGet
package)
</li>
<li class="_5">some minor code tweaking / micro‐optimizations</li>
<li class="_6">fixed some minor documentation issues</li>
</ul>
</div>
</div>
</div>
<div id="v1_0" class="section s3">
<h2 class="title h3"><span>Version 1.0.0, 2012‒07‒19</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
disabled code generation in <code class="fsharp"><a href="../reference/charparsers.html#members.isAnyOf"><span
class="ci">isAnyOf</span></a></code>, <code class="fsharp"><a href="../reference/charparsers.html#members.isNoneOf"><span
class="ci">isNoneOf</span></a></code>, <code class="fsharp"><a href="../reference/charparsers.html#members.anyOf"><span
class="ci">anyOf</span></a></code>, <code class="fsharp"><a href="../reference/charparsers.html#members.skipAnyOf"><span
class="ci">skipAnyOf</span></a></code>, <code class="fsharp"><a href="../reference/charparsers.html#members.noneOf"><span
class="ci">noneOf</span></a></code> and <code class="fsharp"><a href="../reference/charparsers.html#members.skipNoneOf"><span
class="ci">skipNoneOf</span></a></code> by default (you can reenable it using the new <code class="fsharp"><a
href="../download-and-installation.html#configuration-options.USE_STATIC_MAPPING_FOR_IS_ANY_OF"><span
class="ci">USE_STATIC_MAPPING_FOR_IS_ANY_OF</span></a></code> compilation option)
</li>
<li class="_2">
annotated some <code class="fsharp"><a href="../reference/charstream.html#CharStream"><span class="ci">CharStream</span></a></code> methods
with the .NET 4.5 <code class="fsharp"><span class="ci">AggressiveInlining</span></code> option (see the new <code class="fsharp"><span
class="ci">CLR45</span></code> compilation option)
</li>
<li class="_3">updated case folding and XID property tables to Unicode 6.1.0</li>
<li class="_4">fixed two documentation typos (spotted by Rasmus Meldgaard and Kurt Schelfthout – thanks Rasmus and Kurt!)</li>
</ul>
</div>
</div>
</div>
<div id="v0_9_2" class="section s3">
<h2 class="title h3"><span>Version 0.9.2, 2012‒03‒09</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">fixed compilation in Visual Studio 11 Beta</li>
<li class="_2">
added missing <code class="fsharp"><span class="ci">ReturnFrom</span></code> member to <code class="fsharp"><a
href="../reference/primitives.html#members.parse"><span class="ci">parse</span></a></code> builder object (reported by Kurt Schelfthout and
Tomas Petricek – thanks Kurt and Tomas!)
</li>
<li class="_3">
added workaround for .NET <code class="fsharp"><span class="ci">ConsoleStream</span></code> <a
href="https://bitbucket.org/fparsec/main/issue/23/reading-from-systemio__consolestream-hangs">issue</a> (reported by Alexander Kahl – thanks
Alexander!)
</li>
<li class="_4">
set <code class="fsharp"><span class="ci">AllowPartiallyTrustedCallers</span></code> and <code class="fsharp"><span
class="ci">SecurityTransparent</span></code> assembly attributes in LOW_TRUST NET4 build (as suggested by hammett – thanks hammett!)
</li>
<li class="_5">
changed encoding of <span class="tt">FParsecCS/Strings.cs</span> to UTF‐8 (with signature) to fix Visual Studio build on machines with Japanese
locale (the encoding issue was reported on <a href="http://d.hatena.ne.jp/ZOETROPE">http://d.hatena.ne.jp/ZOETROPE</a> – thank you!)
</li>
<li class="_6">
fixed some documentation issues (incorporating feedback from Alexander Gelkin, Antoine Latter and Stephen Swensen – thanks Alexander, Antoine
and Stephen!)
</li>
<li class="_7">
add link to the <a href="http://blog.livedoor.jp/gab_km/archives/1437534.html">Japanese translation of the tutorial</a> by Gab_km (thanks
Gab_km!)
</li>
</ul>
</div>
</div>
</div>
<div id="v0_9_1" class="section s3">
<h2 class="title h3"><span>Version 0.9.1, 2011‒05‒22</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
added <span class="tt">/nooptimizationdata</span> compiler flag as a workaround for an F# comiler <a
href="https://bitbucket.org/fparsec/main/issue/16/fparsec-needs-nooptimizationdata-to-avoid">issue</a> (reported by Michael Giagnocavo – thanks
Michael!)
</li>
<li class="_2">
fixed an <a href="https://bitbucket.org/fparsec/main/issue/17/json-parser-fails-to-build">issue</a> in the JSON sample (reported by Ryan Riley
– thanks Ryan!)
</li>
<li class="_3">
fixed the error message formatting when an error line contains unaccounted newlines or ends with a combining character sequence
</li>
<li class="_4">
added warning to installation notes that the <code class="fsharp"><a href="../reference/charparsers.html#members.regex"><span
class="ci">regex</span></a></code> parser doesn’t work on Mono (reported by Laurent Le Brun – thanks Laurent!)
</li>
<li class="_5">fixed some documentation issues (one of which was reported by Michael Giagnocavo – thanks Michael!)</li>
</ul>
</div>
</div>
</div>
<div id="v0_9" class="section s3">
<h2 class="title h3"><span>Version 0.9.0, 2011‒04‒26</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1"><a href="#v0_9.highlights">Highlights</a></li>
<li class="_2"><a href="#v0_9.changes-to-high-level-api">Changes to high‐level API</a></li>
<li class="_3">
<a href="#v0_9.removed-variants-of-many-sepby-sependby-and-manytill">Removed variants of <code class="fsharp"><span
class="ci">many</span></code>, <code class="fsharp"><span class="ci">sepBy</span></code>, <code class="fsharp"><span
class="ci">sepEndBy</span></code> and <code class="fsharp"><span class="ci">manyTill</span></code></a>
</li>
<li class="_4">
<a href="#v0_9.details-on-changes-to-manychars-manycharstill-and-their-variants">Details on changes to <code class="fsharp"><span
class="ci">manyChars</span></code>, <code class="fsharp"><span class="ci">manyCharsTill</span></code> and their variants</a>
</li>
<li class="_5"><a href="#v0_9.changes-to-low-level-api">Changes to low‐level API</a></li>
<li class="_6"><a href="#v0_9.background-on-low-level-api-changes">Background on low‐level API changes</a></li>
</ul>
</div>
<div class="para _2 lcinp">
<div class="dl multi-para">
<dl class="dl multi-para">
<dt class="_1"><span class="a" id="v0_9.highlights">Highlights</span></dt>
<dd class="_1">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">a new <a href="../tutorial.html">tutorial</a> and <a href="../users-guide/index.html">user’s guide</a></li>
<li class="_2">2x performance improvements due to a refactored low‐level API</li>
<li class="_3">
new <code class="fsharp"><a href="../reference/charparsers.html#members.identifier"><span class="ci">identifier</span></a></code> parser
for parsing identifiers based on Unicode XID syntax
</li>
<li class="_4">
new <code class="fsharp"><a href="../reference/staticmapping.html"><span class="ci">StaticMapping</span></a></code> module for compiling
static key to value mappings into optimized functions (supports <code class="fsharp"><span class="ci">char</span></code>, <code
class="fsharp"><span class="ci">int</span></code> and <code class="fsharp"><span class="ci">string</span></code> as key types)
</li>
</ul>
</div>
</dd>
<dt class="_2"><span class="a" id="v0_9.changes-to-high-level-api">Changes to high‐level API</span></dt>
<dd class="_2">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
the modules <code class="fsharp"><span class="ci">FParsed</span><span class="cm">.</span><a href="../reference/primitives.html"><span
class="ci">Primitives</span></a></code>, <code class="fsharp"><a href="../reference/charparsers.html"><span class="ci">FParsec</span><span
class="cm">.</span><span class="ci">CharParsers</span></a></code> and <code class="fsharp"><a href="../reference/error.html"><span
class="ci">FParsec</span><span class="cm">.</span><span class="ci">Error</span></a></code> are now automatically opened when the <code
class="fsharp"><span class="ci">FParsec</span></code> namespace is opened
</li>
<li class="_2">
new combinators <code class="fsharp"><a href="../reference/primitives.html#members...:62::62:.."><span
class="co">.>>.</span></a></code>, <code class="fsharp"><a href="../reference/primitives.html#members...:62::62:..:63:"><span
class="co">.>>.?</span></a></code>, <code class="fsharp"><a href="../reference/primitives.html#members.notEmpty"><span
class="ci">notEmpty</span></a></code>, <code class="fsharp"><a href="../reference/charparsers.html#members.stringsSepBy"><span
class="ci">stringsSepBy</span></a></code>
</li>
<li class="_3">
new parsers <code class="fsharp"><a href="../reference/charparsers.html#members.identifier"><span class="ci">identifier</span></a></code>,
<code class="fsharp"><a href="../reference/charparsers.html#interface.unicodeSpaces-parsers"><span class="ci">unicodeSpaces</span><span
class="cp">[</span><span class="cn">1</span><span class="cp">]</span></a></code>, <code class="fsharp"><a
href="../reference/charparsers.html#members.notFollowedByEof"><span class="ci">notFollowedByEof</span></a></code>
</li>
<li class="_4">
<code class="fsharp"><span class="ci">whitespace</span></code> and <code class="fsharp"><span class="ci">unicodeWhitespace</span></code>
has been removed
</li>
<li class="_5">
<code class="fsharp"><a href="../reference/charparsers.html#members.unicodeNewline"><span class="ci">unicodeNewline</span></a></code> no
longer recognizes the form feed char <code class="fsharp"><span class="cc"><span class="cld">'</span><span class="ce">\f</span><span
class="crd">'</span></span></code> (<code class="fsharp"><span class="cc"><span class="cld">'</span><span class="ce">\u000C</span><span
class="crd">'</span></span></code>) as a newline character
</li>
<li class="_6">
some variants of <code class="fsharp"><a href="../reference/primitives.html#members.many"><span class="ci">many</span></a></code>, <code
class="fsharp"><a href="../reference/primitives.html#members.sepBy"><span class="ci">sepBy</span></a></code>, <code class="fsharp"><a
href="../reference/primitives.html#members.sepEndBy"><span class="ci">sepEndBy</span></a></code>and <code class="fsharp"><a
href="../reference/primitives.html#members.manyTill"><span class="ci">manyTill</span></a></code> <a
href="#v0_9.removed-variants-of-many-sepby-sependby-and-manytill">have been removed</a>
</li>
<li class="_7">
the <code class="fsharp"><span class="co">...</span><span class="ci">FoldApply</span></code> inline variants of <code class="fsharp"><a
href="../reference/primitives.html#members.many"><span class="ci">many</span></a></code>, <code class="fsharp"><a
href="../reference/primitives.html#members.sepBy"><span class="ci">sepBy</span></a></code>, <code class="fsharp"><a
href="../reference/primitives.html#members.sepEndBy"><span class="ci">sepEndBy</span></a></code> and <code class="fsharp"><a
href="../reference/primitives.html#members.manyTill"><span class="ci">manyTill</span></a></code> have been consolidated in the <code
class="fsharp"><a href="../reference/primitives.html#members.Inline"><span class="ci">FParsec</span><span class="cm">.</span><span
class="ci">Primitives</span><span class="cm">.</span><span class="ci">Inline</span></a></code> helper class
</li>
<li class="_8">
sequence parsers now throw a <code class="fsharp"><span class="ci">System</span><span class="cm">.</span><span
class="ci">InvalidOperationException</span></code> instead of a <code class="fsharp"><span class="ci">System</span><span
class="cm">.</span><span class="ci">Exception</span></code> to prevent an infinite loop
</li>
<li class="_9">
<code class="fsharp"><a href="../reference/charparsers.html#members.anyOf"><span class="ci">anyOf</span></a></code>, <code
class="fsharp"><a href="../reference/charparsers.html#members.noneOf"><span class="ci">noneOf</span></a></code>, <code class="fsharp"><a
href="../reference/charparsers.html#members.isAnyOf"><span class="ci">isAnyOf</span></a></code> and <code class="fsharp"><a
href="../reference/charparsers.html#members.isNoneOf"><span class="ci">isNoneOf</span></a></code> now use runtime code generation (except
in the <a href="../download-and-installation.html#low-trust-version">Low‐Trust version</a>). <em>If you run into performance issues after
upgrading to version 0.9</em>, make sure that you don’t unnecessarily recreate <code class="fsharp"><a
href="../reference/charparsers.html#members.anyOf"><span class="ci">anyOf</span></a></code> or <code class="fsharp"><a
href="../reference/charparsers.html#members.noneOf"><span class="ci">noneOf</span></a></code> parsers, see <a
href="../users-guide/performance-optimizations.html#performance-guidelines.construct-parsers-once">here</a> and <a
href="../users-guide/where-is-the-monad.html#why-the-monadic-syntax-is-slow">here</a>.
</li>
<li class="_0">
<code class="fsharp"><a href="../reference/charparsers.html#members.pstring"><span class="ci">pstring</span></a></code>, <code
class="fsharp"><a href="../reference/charparsers.html#members.notFollowedByString"><span class="ci">notFollowedByString</span></a></code>
and similar parsers now have optimized code paths for argument strings with only 1 char
</li>
<li class="_1">
the behaviour of <code class="fsharp"><a href="../reference/charparsers.html#members.manyChars"><span
class="ci">manyChars</span></a></code> and <code class="fsharp"><a href="../reference/charparsers.html#members.manyCharsTill"><span
class="ci">manyCharsTill</span></a></code> and their variants <a
href="#v0_9.details-on-changes-to-manychars-manycharstill-and-their-variants">has slightly changed</a>
</li>
<li class="_2">
the skip variants of <code class="fsharp"><a href="../reference/charparsers.html#members.manyChars"><span
class="ci">manyChars</span></a></code> and <code class="fsharp"><a href="../reference/charparsers.html#members.manyCharsTill"><span
class="ci">manyCharsTill</span></a></code> <a href="#v0_9.removed-skip-variants-of-manyChars">have been removed</a>
</li>
<li class="_3">
<p>Some renamings and function signature changes:</p>
<div id="v0_9.renamings" class="table">
<table cellspacing="0">
<caption><span class="table-caption-prefix">Table <span class="table-number">1.3.10.1</span></span></caption>
<thead>
<tr class="_1">
<th class="_1">Old</th>
<th class="_2">New</th>
</tr>
</thead>
<tbody>
<tr class="_1">
<td class="_1"><code class="fsharp"><span class="ci">restOfLine</span></code></td>
<td class="_2">
<code class="fsharp"><a href="../reference/charparsers.html#members.restOfLine"><span class="ci">restOfLine</span></a> <span
class="cb">true</span></code>
</td>
</tr>
<tr class="_2">
<td class="_1"><code class="fsharp"><span class="ci">skipRestOfLine</span></code></td>
<td class="_2">
<code class="fsharp"><a href="../reference/charparsers.html#members.skipRestOfLine"><span class="ci">skipRestOfLine</span></a> <span
class="cb">true</span></code>
</td>
</tr>
<tr class="_3">
<td class="_1"><code class="fsharp"><span class="ci">skipToEndOfLine</span></code></td>
<td class="_2">
<code class="fsharp"><a href="../reference/charparsers.html#members.skipRestOfLine"><span class="ci">skipRestOfLine</span></a> <span
class="cb">false</span></code>
</td>
</tr>
<tr class="_4">
<td class="_1">
<code class="fsharp"><span class="ci">skipToString</span><span class="cp">[</span><span class="ci">CI</span><span
class="cp">]</span> <span class="ci">str</span> <span class="ci">n</span></code>
</td>
<td class="_2">
<code class="fsharp"><a href="../reference/charparsers.html#members.skipCharsTillString"><span
class="ci">skipCharsTillString</span></a><span class="cp">[</span><span class="ci">CI</span><span class="cp">]</span> <span
class="ci">str</span> <span class="cb">false</span> <span class="ci">n</span></code>
</td>
</tr>
<tr class="_5">
<td class="_1">
<code class="fsharp"><span class="ci">charsTillString</span><span class="cp">[</span><span class="ci">CI</span><span
class="cp">]</span> <span class="ci">str</span> <span class="ci">n</span></code>
</td>
<td class="_2">
<code class="fsharp"><a href="../reference/charparsers.html#members.charsTillString"><span class="ci">charsTillString</span></a><span
class="cp">[</span><span class="ci">CI</span><span class="cp">]</span> <span class="ci">str</span> <span class="cb">true</span> <span
class="ci">n</span></code>
</td>
</tr>
<tr class="_6">
<td class="_1">
<code class="fsharp"><span class="ci">skipCharsTillString</span><span class="cp">[</span><span class="ci">CI</span><span
class="cp">]</span> <span class="ci">str</span> <span class="ci">n</span></code>
</td>
<td class="_2">
<code class="fsharp"><a href="../reference/charparsers.html#members.skipCharsTillString"><span
class="ci">skipCharsTillString</span></a><span class="cp">[</span><span class="ci">CI</span><span class="cp">]</span> <span
class="ci">str</span> <span class="cb">true</span> <span class="ci">n</span></code>
</td>
</tr>
<tr class="_7">
<td class="_1"><code class="fsharp"><span class="ci">followedByChar</span> <span class="ci">chr</span></code></td>
<td class="_2">
<pre class="code fsharp"><span class="ck">if</span> <span class="ci">chr</span> <span class="co">=</span> <span class="cc"><span class="cld">'</span><span class="ce">\r</span><span class="crd">'</span></span> <span class="co">||</span> <span class="ci">chr</span> <span class="co">=</span> <span class="cc"><span class="cld">'</span><span class="ce">\n</span><span class="crd">'</span></span> <span class="ck">then</span> <a href="../reference/charparsers.html#members.followedByNewline"><span class="ci">followedByNewline</span></a>
<span class="ck">else</span> <a href="../reference/charparsers.html#members.followedByString"><span class="ci">followedByString</span></a> <span class="cp">(</span><span class="ci">string</span> <span class="ci">chr</span><span class="cp">)</span>
</pre>
</td>
</tr>
<tr class="_8">
<td class="_1"><code class="fsharp"><span class="ci">notFollowedByChar</span> <span class="ci">chr</span></code></td>
<td class="_2">
<pre class="code fsharp"><span class="ck">if</span> <span class="ci">chr</span> <span class="co">=</span> <span class="cc"><span class="cld">'</span><span class="ce">\r</span><span class="crd">'</span></span> <span class="co">||</span> <span class="ci">chr</span> <span class="co">=</span> <span class="cc"><span class="cld">'</span><span class="ce">\n</span><span class="crd">'</span></span> <span class="ck">then</span> <a href="../reference/charparsers.html#members.notFollowedByNewline"><span class="ci">notFollowedByNewline</span></a>
<span class="ck">else</span> <a href="../reference/charparsers.html#members.notFollowedByString"><span class="ci">notFollowedByString</span></a> <span class="cp">(</span><span class="ci">string</span> <span class="ci">chr</span><span class="cp">)</span>
</pre>
</td>
</tr>
<tr class="_9">
<td class="_1"><code class="fsharp"><span class="ci">currentCharSatisfies</span> <span class="ci">f</span></code></td>
<td class="_2">
<code class="fsharp"><a href="../reference/charparsers.html#members.nextCharSatisfies"><span
class="ci">nextCharSatisfies</span></a> <span class="ci">f</span></code>
</td>
</tr>
<tr class="_0">
<td class="_1"><code class="fsharp"><span class="ci">nextCharSatisfies</span> <span class="ci">f</span></code></td>
<td class="_2">
<code class="fsharp"><a href="../reference/charparsers.html#members.next2CharsSatisfy"><span
class="ci">next2CharsSatisfy</span></a> <span class="cp">(</span><span class="ck">fun</span> <span class="ci">_</span> <span
class="ci">c1</span> <span class="cr">-></span> <span class="ci">f</span> <span class="ci">c1</span><span
class="cp">)</span></code>
</td>
</tr>
</tbody>
</table>
</div>
</li>
</ul>
</div>
<div class="para _2 lcinp">
<ul class="l1">
<li class="_1">
<p>
<code class="fsharp"><a href="../reference/operatorprecedenceparser.html#members.OperatorPrecedenceParser"><span
class="ci">OperatorPrecedenceParser</span></a></code> has changed:
</p>
<ul class="l2">
<li class="_1">
all types have been moved from the <code class="fsharp"><span class="ci">FParsec</span><span class="cm">.</span><span
class="ci">OperatorPrecedenceParser</span></code> module into the main <code class="fsharp"><span class="ci">FParsec</span></code>
namespace
</li>
<li class="_2">
the operator types <code class="fsharp"><span class="ci">InfixOp</span></code>, <code class="fsharp"><span
class="ci">PrefixOp</span></code>, … classes have been renamed to <code class="fsharp"><a
href="../reference/operatorprecedenceparser.html#members.InfixOperator"><span class="ci">InfixOperator</span></a></code>, <code
class="fsharp"><a href="../reference/operatorprecedenceparser.html#members.PrefixOperator"><span
class="ci">PrefixOperator</span></a></code>, …
</li>
<li class="_3">
<code class="fsharp"><span class="ci">Assoc</span></code> has been renamed to <code class="fsharp"><a
href="../reference/operatorprecedenceparser.html#interface.Associativity"><span class="ci">Associativity</span></a></code>
</li>
<li class="_4">
the “whitespace‐parser” argument of the operator types has been <a
href="../reference/operatorprecedenceparser.html#members.Operator">generalized into an “after‐string‐parser” argument</a>
</li>
<li class="_5">
if you previously used the <code class="fsharp"><span class="ci">InfixOp'</span></code>, <code class="fsharp"><span
class="ci">PrefixOp'</span></code>, … constructors to supply a mapping that read the text position of the parsed operator from the passed
<code class="fsharp"><span class="ci">State</span></code> instance, read <a
href="../reference/operatorprecedenceparser.html#members.get-position-with-after-string-parser">this</a>
</li>
<li class="_6">
the <code class="fsharp"><span class="ci">AddOperators</span></code> method has been removed, call <code class="fsharp"><a
href="../reference/operatorprecedenceparser.html#members.AddOperator"><span class="ci">AddOperator</span></a></code> instead
</li>
<li class="_7">
the <code class="fsharp"><a href="../reference/operatorprecedenceparser.html#members.OperatorConflictErrorFormatter"><span
class="ci">OperatorConflictErrorFormatter</span></a></code> replaced the <code class="fsharp"><span
class="ci">OperatorConflictHandler</span></code>
</li>
</ul>
</li>
</ul>
</div>
</dd>
<dt class="_3">
<span class="a" id="v0_9.removed-variants-of-many-sepby-sependby-and-manytill">Removed variants of <code class="fsharp"><span
class="ci">many</span></code>, <code class="fsharp"><span class="ci">sepBy</span></code>, <code class="fsharp"><span
class="ci">sepEndBy</span></code> and <code class="fsharp"><span class="ci">manyTill</span></code></span>
</dt>
<dd class="_3">
<div class="para _1">
<p>
The <code class="fsharp"><span class="co">...</span><span class="ci">Rev</span></code>, <code class="fsharp"><span
class="co">...</span><span class="ci">Fold</span></code> and <code class="fsharp"><span class="co">...</span><span
class="ci">Reduce</span></code> variants of <code class="fsharp"><a href="../reference/primitives.html#members.many"><span
class="ci">many</span></a></code>, <code class="fsharp"><a href="../reference/primitives.html#members.sepBy"><span
class="ci">sepBy</span></a></code>, <code class="fsharp"><a href="../reference/primitives.html#members.sepEndBy"><span
class="ci">sepEndBy</span></a></code>and <code class="fsharp"><a href="../reference/primitives.html#members.manyTill"><span
class="ci">manyTill</span></a></code> have been removed.
</p>
</div>
<div class="para _2 lcinp">
<p>
If you previously used these variants, you can easily define them in your own code using the <code class="fsharp"><a
href="../reference/primitives.html#members.:124::62::62:"><span class="co">|>></span></a></code> combinator, as documented in the
reference documentation for the previous version. For example:
</p>
<pre class="code fsharp"><span class="ck">let</span> <span class="ci">manyRev</span> <span class="ci">p</span> <span class="cp">=</span> <a href="../reference/primitives.html#members.many"><span class="ci">many</span></a> <span class="ci">p</span> <a href="../reference/primitives.html#members.:124::62::62:"><span class="co">|>></span></a> <span class="ci">List</span><span class="cm">.</span><span class="ci">rev</span>
<span class="ck">let</span> <span class="ci">manyFold</span> <span class="ci">acc0</span> <span class="ci">f</span> <span class="ci">p</span> <span class="cp">=</span> <a href="../reference/primitives.html#members.many"><span class="ci">many</span></a> <span class="ci">p</span> <a href="../reference/primitives.html#members.:124::62::62:"><span class="co">|>></span></a> <span class="ci">List</span><span class="cm">.</span><span class="ci">fold</span> <span class="ci">f</span> <span class="ci">acc0</span>
<span class="ck">let</span> <span class="ci">manyReduce</span> <span class="ci">f</span> <span class="ci">defVal</span> <span class="ci">p</span> <span class="cp">=</span> <span class="cp">(</span><a href="../reference/primitives.html#members.many1"><span class="ci">many1</span></a> <span class="ci">p</span> <a href="../reference/primitives.html#members.:124::62::62:"><span class="co">|>></span></a> <span class="ci">List</span><span class="cm">.</span><span class="ci">reduce</span> <span class="ci">f</span><span class="cp">)</span> <a href="../reference/primitives.html#members.:60::124::62::37:"><span class="co"><|>%</span></a> <span class="ci">defVal</span><span class="cm">.</span>
</pre>
</div>
<div class="para _3">
<p>
If you need <em>optimized</em> implementations, you can define them using the new <code class="fsharp"><a
href="../reference/primitives.html#members.Inline"><span class="ci">Inline</span></a></code> helper class. The file <a
href="https://github.com/stephan-tolksdorf/fparsec/blob/master/Doc/misc/removed-many-variants.fs"><span
class="tt">Doc/misc/removed‐many‐variants.fs</span></a> contains optimized definitions for all removed variants.
</p>
</div>
</dd>
<dt class="_4">
<span class="a" id="v0_9.details-on-changes-to-manychars-manycharstill-and-their-variants">Details on changes to <code class="fsharp"><span
class="ci">manyChars</span></code>, <code class="fsharp"><span class="ci">manyCharsTill</span></code> and their variants</span>
</dt>
<dd class="_4">
<div class="para _1">
<p>
The behaviour of all variants of <code class="fsharp"><a href="../reference/charparsers.html#members.manyChars"><span
class="ci">manyChars</span></a></code> and <code class="fsharp"><a href="../reference/charparsers.html#members.manyCharsTill"><span
class="ci">manyCharsTill</span></a></code> has slightly changed. Now <code class="fsharp"><a
href="../reference/charparsers.html#members.manyChars"><span class="ci">manyChars</span></a> <span class="ci">cp</span></code> is equivalent
to <code class="fsharp"><a href="../reference/primitives.html#members.many"><span class="ci">many</span></a> <span
class="ci">cp</span></code>, except that it returns a string instead of char list. Previously, <code class="fsharp"><a
href="../reference/charparsers.html#members.manyChars"><span class="ci">manyChars</span></a> <span class="ci">cp</span></code> behaved like
<code class="fsharp"><a href="../reference/primitives.html#members.many"><span class="ci">many</span></a> <span class="cp">(</span><a
href="../reference/primitives.html#members.attempt"><span class="ci">attempt</span></a> <span class="ci">cp</span><span
class="cp">)</span></code>, i.e. it automatically backtracked if the char parser had failed after consuming input. The same change has been
made to the behaviour of all other variants of <code class="fsharp"><a href="../reference/charparsers.html#members.manyChars"><span
class="ci">manyChars</span></a></code> and <code class="fsharp"><a href="../reference/charparsers.html#members.manyCharsTill"><span
class="ci">manyCharsTill</span></a></code>. The new behaviour is more consistent with the rest of the libary and allows a faster
implementation with the new low‐level API.
</p>
</div>
<div class="para _2">
<p>There probably aren’t many parsers that relied on the old behaviour.</p>
</div>
<div class="para _3">
<p>
The behaviour change made the <code class="fsharp"><span class="ci">skip</span></code> variants of <code class="fsharp"><span
class="ci">manyChar</span></code> and <code class="fsharp"><a href="../reference/charparsers.html#members.manyCharsTill"><span
class="ci">manyCharsTill</span></a></code> obsolete, since e.g. <code class="fsharp"><span class="ci">skipManyChars</span></code> would do
exactly the same as <code class="fsharp"><a href="../reference/primitives.html#members.skipMany"><span class="ci">skipMany</span></a> <span
class="ci">cp</span></code>. <span class="a" id="v0_9.removed-skip-variants-of-manyChars">Hence, the <code class="fsharp"><span
class="ci">skip</span></code> variants have been removed</span>.
</p>
</div>
</dd>
<dt class="_5"><span class="a" id="v0_9.changes-to-low-level-api">Changes to low‐level API</span></dt>
<dd class="_5">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
The old <code class="fsharp"><span class="ci">CharStream</span></code> and <code class="fsharp"><span class="ci">State</span></code>
classes have been merged into a single <code class="fsharp"><a href="../reference/charstream.html#CharStream"><span
class="ci">CharStream</span></a></code> class with a mutable interface.
</li>
<li class="_2">
<code class="fsharp"><a href="../reference/primitives.html#members.Parser"><span class="ci">Parser</span></a></code> functions now take a
<code class="fsharp"><a href="../reference/charstream.html#CharStream_1"><span class="ci">CharStream</span><span
class="cp"><</span><span class="ctv">'u</span><span class="cp">></span></a></code> instance as the input argument.
</li>
<li class="_3">
The <code class="fsharp"><a href="../reference/reply.html"><span class="ci">Reply</span></a></code> type has been moved to the main <code
class="fsharp"><span class="ci">FParsec</span></code> namespace and no longer has a <code class="fsharp"><span
class="ci">State</span></code> member.
</li>
<li class="_4">
Parser state comparisons are now done with the help of the <code class="fsharp"><a href="../reference/charstream.html#CharStream"><span
class="ci">CharStream</span></a></code>’s <code class="fsharp"><a href="../reference/charstream.html#CharStream.members.StateTag"><span
class="ci">StateTag</span></a></code>.
</li>
<li class="_5">
<p>
Various methods from the old <code class="fsharp"><span class="ci">CharStream</span><span class="cm">.</span><span
class="ci">Iterator</span></code> and <code class="fsharp"><span class="ci">State</span></code> types have been renamed in the new <code
class="fsharp"><a href="../reference/charstream.html#CharStream"><span class="ci">CharStream</span></a></code> class and have new
signatures:
</p>
<ul class="l2">
<li class="_1">
<p>When you adapt old code, the following changes <strong>require particular attention</strong>:</p>
<ul class="l3">
<li class="_1">
the old <code class="fsharp"><span class="ci">Iterator</span><span class="cm">.</span><span class="ci">Read</span></code> methods
<em>did not</em> advance the input stream position, but the new <code class="fsharp"><a
href="../reference/charstream.html#CharStream"><span class="ci">CharStream</span></a><span class="cm">.</span><a
href="../reference/charstream.html#CharStream.members.Read"><span class="ci">Read</span></a></code> now <em>do</em> (as is the expected
behaviour in traditional stream classes)
</li>
<li class="_2">
the old <code class="fsharp"><span class="ci">Read</span><span class="cp">()</span></code> is equivalent to the new <code
class="fsharp"><a href="../reference/charstream.html#CharStream.members.Peek"><span class="ci">Peek</span></a><span
class="cp">()</span></code>
</li>
<li class="_3">
the old <code class="fsharp"><span class="ci">Read</span><span class="cp">(</span><span class="ci">int</span><span
class="cp">)</span></code> is equivalent to the new <code class="fsharp"><a
href="../reference/charstream.html#CharStream.members.PeekString"><span class="ci">PeekString</span></a><span class="cp">(</span><span
class="ci">int</span><span class="cp">)</span></code>
</li>
<li class="_4">
the old <code class="fsharp"><span class="ci">Peek</span><span class="cp">()</span></code> is equivalent to the new (and old) <code
class="fsharp"><a href="../reference/charstream.html#CharStream.members.Peek_int"><span class="ci">Peek</span></a><span
class="cp">(</span><span class="cn">1</span><span class="cp">)</span></code>
</li>
</ul>
</li>
<li class="_2">
<p>More renamings:</p>
<ul class="l3">
<li class="_1">
<code class="fsharp"><span class="ci">Next</span></code>, <code class="fsharp"><span class="ci">Advance</span></code> ? <code
class="fsharp"><a href="../reference/charstream.html#CharStream.interface.Skip-members"><span class="ci">Skip</span></a></code>
</li>
<li class="_2">
<code class="fsharp"><span class="ci">_Increment</span></code>, <code class="fsharp"><span class="ci">_Decrement</span></code> ? <code
class="fsharp"><a href="../reference/charstream.html#CharStream.interface.SkipAndPeek-members"><span
class="ci">SkipAndPeek</span></a></code>
</li>
<li class="_3">
<code class="fsharp"><span class="ci">SkipRestOfLine</span></code> with string output ? <code class="fsharp"><a
href="../reference/charstream.html#CharStream.members.ReadRestOfLine"><span class="ci">ReadRestOfLine</span></a></code>
</li>
<li class="_4">
<code class="fsharp"><span class="ci">SkipCharOrNewlines</span></code> with string output ? <code class="fsharp"><a
href="../reference/charstream.html#CharStream.members.ReadCharsOrNewlines"><span class="ci">ReadCharsOrNewlines</span></a></code>
</li>
<li class="_5">
<code class="fsharp"><span class="ci">SkipToString</span></code> ? <code class="fsharp"><a
href="../reference/charstream.html#CharStream.interface.SkipCharsOrNewlinesUntilString-members"><span
class="ci">SkipCharsOrNewlinesUntilString</span></a></code>
</li>
<li class="_6">
<code class="fsharp"><span class="ci">SkipToStringCI</span></code> ? <code class="fsharp"><a
href="../reference/charstream.html#CharStream.interface.SkipCharsOrNewlinesUntilCaseFoldedString-members"><span
class="ci">SkipCharsOrNewlinesUntilCaseFoldedString</span></a></code>
</li>
<li class="_7">
<code class="fsharp"><span class="ci">ReadUntil</span></code> ? <code class="fsharp"><a
href="../reference/charstream.html#CharStream_1.members.ReadFrom"><span class="ci">ReadFrom</span></a></code>
</li>
<li class="_8">
<code class="fsharp"><span class="ci">CharStream</span><span class="cm">.</span><span class="ci">FoldCase</span></code> ? <code
class="fsharp"><a href="../reference/text.html#members.FoldCase"><span class="ci">Text</span><span class="cm">.</span><span
class="ci">FoldCase</span></a></code>
</li>
<li class="_9">
<code class="fsharp"><span class="ci">CharStream</span><span class="cm">.</span><span class="ci">NormalizeNewlines</span></code> ?
<code class="fsharp"><a href="../reference/text.html#members.NormalizeNewlines"><span class="ci">Text</span><span
class="cm">.</span><span class="ci">NormalizeNewlines</span></a></code>
</li>
</ul>
</li>
</ul>
</li>
<li class="_6">
<p>New <code class="fsharp"><a href="../reference/charstream.html#CharStream"><span class="ci">CharStream</span></a></code> methods:</p>
<ul class="l2">
<li class="_1">
<code class="fsharp"><a href="../reference/charstream.html#CharStream.interface.Skip-members"><span class="ci">Skip</span></a></code>
methods with char and string arguments
</li>
<li class="_2">
<code class="fsharp"><a href="../reference/charstream.html#CharStream.members.SkipUnicodeWhitespace"><span
class="ci">SkipUnicodeWhitespace</span></a></code>
</li>
<li class="_3">
<code class="fsharp"><a href="../reference/charstream.html#CharStream.members.SkipNewlineThenWhitespace"><span
class="ci">SkipNewlineThenWhitespace</span></a></code>
</li>
</ul>
</li>
<li class="_7">
The <code class="fsharp"><a href="../reference/errormessage.html#members.ErrorMessage"><span class="ci">ErrorMessage</span></a></code> and
<code class="fsharp"><a href="../reference/errormessagelist.html"><span class="ci">ErrorMessageList</span></a></code> types are now defined
in the C# library part. This allows us to implement full parsers in C#. The <code class="fsharp"><a href="../reference/error.html"><span
class="ci">FParsec</span><span class="cm">.</span><span class="ci">Error</span></a></code> module contains type abbreviations and active
patters that provide the familiar interface to F# clients.
</li>
<li class="_8">
All error messages used by built‐in FParsec parsers are now defined in the C# classes <code class="fsharp"><span
class="ci">FParsec</span><span class="cm">.</span><span class="ci">Strings</span></code> and <code class="fsharp"><span
class="ci">FParsec</span><span class="cm">.</span><span class="ci">Errors</span></code>. This should simplify customization and
internationalization efforts.
</li>
</ul>
</div>
</dd>
<dt class="_6"><span class="a" id="v0_9.background-on-low-level-api-changes">Background on low‐level API changes</span></dt>
<dd class="_6">
<div class="para _1">
<p>
Previously parsers were implemented as functions operating on an immutable parser state in the form of a <code class="fsharp"><a
href="../reference/charstream.html#CharStream_1.members.State"><span class="ci">State</span></a></code> instance. A parser function received
a <code class="fsharp"><a href="../reference/charstream.html#CharStream_1.members.State"><span class="ci">State</span></a></code> instance
as the input and returned a <code class="fsharp"><a href="../reference/charstream.html#CharStream_1.members.State"><span
class="ci">State</span></a></code> instance as part of its return value. Since <code class="fsharp"><a
href="../reference/charstream.html#CharStream_1.members.State"><span class="ci">State</span></a></code> instances were immutable, a parser
function had to create a new <code class="fsharp"><a href="../reference/charstream.html#CharStream_1.members.State"><span
class="ci">State</span></a></code> instance to advance the input stream, e.g. by calling <code class="fsharp"><span
class="ci">state</span><span class="cm">.</span><span class="ci">Advance</span><span class="cp">(</span><span class="cn">2</span><span
class="cp">)</span></code>.
</p>
</div>
<div class="para _2">
<p>
This architecture was motivated by the desire to provide an API as “functional” as possible, an API that shields users from
the underlying imperative/mutable nature of input streams. When FParsec originally started as a relatively close port of Haskell’s Parsec
library, this design felt like a natural fit for a functional parser library. However, later, when FParsec moved away from its Parsec roots
(to improve performance and provide more features), it became increasingly clear that the immutable <code class="fsharp"><a
href="../reference/charstream.html#CharStream"><span class="ci">CharStream</span></a></code>‐<code class="fsharp"><a
href="../reference/charstream.html#CharStream_1.members.State"><span class="ci">State</span></a></code>‐design was the main obstacle
preventing FParsec from reaching the performance of hand‐optimized recursive‐descent parsers.
</p>
</div>
<div class="para _3">
<p>
Initial tests with some quick prototypes revealed that the allocation and garbage collection of temporary <code class="fsharp"><a
href="../reference/charstream.html#CharStream_1.members.State"><span class="ci">State</span></a></code> instances took up to 50% or more of
the run time of typical parsers – even though the <code class="fsharp"><a
href="../reference/charstream.html#CharStream_1.members.State"><span class="ci">State</span></a></code> class was already heavily optimized.
These tests also indicated that consolidating the stream and state classes into a classical imperative stream class simplified the overall
library implementation and made the library source code more accessible to new users.
</p>
</div>
<div class="para _4">
<p>
The main drawback of the API change is that it requires modifications to practically all low‐level parser code. Another drawback is that
backtracking is slightly less convenient with the new low‐level API (as the parser state has to be explicitly saved and restored, while
previously one could just continue with an old state instance).
</p>
</div>
<div class="para _5">
<p>Since FParsec’s high‐level API is only minimally affected by the change, the advantages seem to outweigh the costs.</p>
</div>
</dd>
</dl>
</div>
</div>
</div>
</div>
<div id="v0_8_x" class="section s3">
<h2 class="title h3"><span>Version 0.8.x, no release</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<div class="dl multi-para">
<dl class="dl multi-para">
<dt class="_1">New features/ improvements</dt>
<dd class="_1">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
case‐insensitive matching with <code class="fsharp"><span class="ci">pstringCI</span></code>, <code class="fsharp"><span
class="ci">charsTillStringCI</span></code>, etc. (using the Unicode 1‐to‐1 case folding mappings for chars in the BMP)
</li>
<li class="_2">
various new parsers and combinators, including <code class="fsharp"><span class="ci">restOfLine</span></code>, <code class="fsharp"><span
class="ci">skipToString</span></code>, <code class="fsharp"><span class="ci">manySatisfyMinMax</span></code>, <code class="fsharp"><span
class="ci">manyStrings</span></code>, <code class="fsharp"><span class="ci">withSkippedString</span></code>
</li>
<li class="_3">
new functions <code class="fsharp"><span class="ci">runParserOnSubstring</span></code> and <code class="fsharp"><span
class="ci">runParserOnSubstream</span></code>
</li>
<li class="_4">various performance improvements</li>
<li class="_5">Silverlight support</li>
<li class="_6">F# 1.9.6.16 compatibility</li>
</ul>
</div>
</dd>
<dt class="_2">Design changes</dt>
<dd class="_2">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
standardized on a single input stream type (<code class="fsharp"><span class="ci">FParsec</span><span class="cm">.</span><span
class="ci">CharStream</span></code>) and a single concrete parser state type (<code class="fsharp"><span class="ci">FParsec</span><span
class="cm">.</span><span class="ci">State</span></code>)
</li>
<li class="_2">
<p>
refactored the <code class="fsharp"><span class="ci">Reply</span><span class="cp"><</span><span class="ci">_</span><span
class="cp">,</span><span class="ci">_</span><span class="cp">></span></code>, <code class="fsharp"><span
class="ci">ErrorMessage</span></code> and <code class="fsharp"><span class="ci">ParserError</span></code> types:
</p>
<ul class="l2">
<li class="_1">error replies now also contain a complete <code class="fsharp"><span class="ci">State</span></code></li>
<li class="_2">
whether a parser has changed the state is now determined by checking the input and the output state for equality, instead of testing the
<code class="fsharp"><span class="ci">Consumed</span></code> flag
</li>
<li class="_3">
replaced the <code class="fsharp"><span class="ci">Reply</span><span class="cp"><</span><span class="ci">_</span><span
class="cp">,</span><span class="ci">_</span><span class="cp">></span><span class="cp">.</span><span class="ci">Flags</span></code>
with a <code class="fsharp"><span class="ci">Status</span></code> field
</li>
<li class="_4">
replaced the various helper functions for constructing a <code class="fsharp"><span class="ci">Reply</span></code> with three overloaded
<code class="fsharp"><span class="ci">Reply</span><span class="cp"><</span><span class="ci">_</span><span class="cp">,</span><span
class="ci">_</span><span class="cp">></span></code> constructors (with different arities)
</li>
</ul>
</li>
<li class="_3">
all char parsers are now “newline aware”, i.e. they normalize any of the three standard newline representations (<code
class="fsharp"><span class="cs"><span class="cld">"</span><span class="ce">\n</span><span class="crd">"</span></span></code>, <code
class="fsharp"><span class="cs"><span class="cld">"</span><span class="ce">\r</span><span class="ce">\n</span><span
class="crd">"</span></span></code>, <code class="fsharp"><span class="cs"><span class="cld">"</span><span class="ce">\r</span><span
class="crd">"</span></span></code>) to “n” and they properly increment the line count whenever they parse a newline;
<strong>this means that the behaviour of almost all char parsers has changed with regard to how newline chars are handled</strong>
</li>
</ul>
</div>
</dd>
<dt class="_3">Bug fixes</dt>
<dd class="_3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
The <code class="fsharp"><span class="ci">CharStream</span></code> class now uses the serialization API to persist the decoder state for
backtracking purposes. Previously it relied on the decoder loosing its state at block boundaries after a certain sequence of method calls.
The previous approach works in practice for the .NET decoders of the standard unicode encodings and for simple stateless encodings like
ASCII and ANSI, but it relies on undocumented behaviour and it does not work reliably for encodings like GB18030, ISO‐2022 or ISCII.
</li>
<li class="_2">
In previous FParsec versions the <code class="fsharp"><span class="ci">CharStream</span></code> file path/System.IO.Stream constructors
failed with an <code class="fsharp"><span class="ci">IndexOutOfRange</span></code> exception when the file/stream was empty and encoding
detection was not turned off (reported by Vesa Karvonen ‐ thanks Vesa!).
</li>
<li class="_3">
In previous FParsec versions the <code class="fsharp"><span class="ci">NumberLiteral</span><span class="cm">.</span><span
class="ci">String</span></code> returned by the <code class="fsharp"><span class="ci">numberLiteral</span></code> parser included parsed
suffix chars despite the documentation claiming the opposite. (The testing code was buggy too.) Applications that rely on this behaviour
can now use the new <code class="fsharp"><span class="ci">NumberLiteralOptions</span><span class="cm">.</span><span
class="ci">IncludeSuffixCharsInString</span></code> to force the <code class="fsharp"><span class="ci">numberLiteral</span></code> parser
to include any suffix chars in the returned string.
</li>
<li class="_4">
Fixed behaviour of <code class="fsharp"><span class="co">>>=?</span></code>, <code class="fsharp"><span
class="co">>>?</span></code> and <code class="fsharp"><span class="co">.>>?</span></code> when second parser fails with fatal
error without changing the parser state.
</li>
<li class="_5">
Fixed behaviour of <code class="fsharp"><span class="ci">nextCharSatisfies</span><span class="cp">[</span><span class="ci">Not</span><span
class="cp">]</span></code> when current “char” is a <code class="fsharp"><span class="cs"><span class="cld">"</span><span
class="ce">\r</span><span class="ce">\n</span><span class="crd">"</span></span></code> newline.
</li>
</ul>
</div>
</dd>
<dt class="_4">Other breaking changes</dt>
<dd class="_4">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
renamed the module <code class="fsharp"><span class="ci">CharParser</span></code> to <code class="fsharp"><span
class="ci">CharParsers</span></code>
</li>
<li class="_2">
moved <code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span
class="ci">OperatorPrecedenceParser</span></code> into separate module
</li>
</ul>
</div>
<div class="para _2 lcinp">
<ul class="l1">
<li class="_1">
<p><code class="fsharp"><span class="ci">FParsec</span><span class="cm">.</span><span class="ci">Primitives</span></code>:</p>
<ul class="l2">
<li class="_1">
<strong>subtle change:</strong> renamed <code class="fsharp"><span class="ci">message</span></code> to <code class="fsharp"><span
class="ci">fail</span></code> and <code class="fsharp"><span class="ci">fail</span></code> to <code class="fsharp"><span
class="ci">failFatally</span></code>
</li>
<li class="_2">
renamed <code class="fsharp"><span class="ci">pair</span></code>, <code class="fsharp"><span class="ci">triple</span></code> and <code
class="fsharp"><span class="ci">quad</span></code> to <code class="fsharp"><span class="ci">tuple2</span></code>, <code
class="fsharp"><span class="ci">tuple3</span></code> and <code class="fsharp"><span class="ci">tuple4</span></code>
</li>
<li class="_3">
renamed <code class="fsharp"><span class="ci">manyFoldLeft</span></code> to <code class="fsharp"><span class="ci">manyFold</span></code>
and changed the argument order of the accumulator and function argument
</li>
<li class="_4">removed <code class="fsharp"><span class="ci">manyFoldRight</span></code></li>
<li class="_5">
renamed <code class="fsharp"><span class="ci">count</span></code> to <code class="fsharp"><span class="ci">parray</span></code> and
changed the return type, renamed <code class="fsharp"><span class="ci">skipCount</span></code> to <code class="fsharp"><span
class="ci">skipArray</span></code>
</li>
<li class="_6">
renamed <code class="fsharp"><span class="ci">followedBy</span></code> and <code class="fsharp"><span
class="ci">notFollowedBy</span></code> to <code class="fsharp"><span class="ci">followedByL</span></code> and <code class="fsharp"><span
class="ci">notFollowedByL</span></code> and introduced <code class="fsharp"><span class="ci">followedBy</span></code> and <code
class="fsharp"><span class="ci">notFollowedBy</span></code> functions that take no second argument
</li>
<li class="_7">
moved <code class="fsharp"><span class="ci">ParserResult</span><span class="cp"><</span><span class="ci">_</span><span
class="cp">></span></code> to <code class="fsharp"><span class="ci">CharParsers</span></code> and changed constructor arguments
</li>
<li class="_8">removed applyParser</li>
<li class="_9">
removed <code class="fsharp"><span class="co">|>>=</span></code>, now <code class="fsharp"><span class="co">>>=</span></code>
automatically uses an optimized branch for uncurried functions
</li>
<li class="_0">
removed <code class="fsharp"><span class="ci">endBy</span></code> and <code class="fsharp"><span class="ci">endBy1</span></code> (<code
class="fsharp"><span class="ci">endBy</span> <span class="ci">p</span> <span class="ci">sep</span></code> can be replaced with <code
class="fsharp"><span class="ci">many</span> <span class="cp">(</span><span class="ci">p</span> <span class="co">.>></span> <span
class="ci">sep</span><span class="cp">)</span></code> and <code class="fsharp"><span class="ci">endBy1</span> <span
class="ci">p</span> <span class="ci">sep</span></code> with <code class="fsharp"><span class="ci">many1</span> <span
class="cp">(</span><span class="ci">p</span> <span class="co">.>></span> <span class="ci">sep</span><span
class="cp">)</span></code>)
</li>
</ul>
</li>
</ul>
</div>
<div class="para _3 lcinp">
<ul class="l1">
<li class="_1">
<p><code class="fsharp"><span class="ci">FParsec</span><span class="cm">.</span><span class="ci">CharParsers</span></code>:</p>
<ul class="l2">
<li class="_1">
renamed <code class="fsharp"><span class="ci">manyTillString</span></code> to <code class="fsharp"><span
class="ci">charsTillString</span></code>
</li>
<li class="_2">removed <code class="fsharp"><span class="ci">applyParser</span></code> from the public interface</li>
<li class="_3">
removed <code class="fsharp"><span class="ci">getIndex</span></code>, <code class="fsharp"><span class="ci">skip</span></code>, <code
class="fsharp"><span class="ci">registerNL</span></code>, <code class="fsharp"><span class="ci">extract</span></code>, <code
class="fsharp"><span class="ci">regexp</span></code> (these low‐level operations should be done directly through the <code
class="fsharp"><span class="ci">State</span><span class="cp"><</span><span class="ci">_</span><span
class="cp">></span></code>/<code class="fsharp"><span class="ci">CharStream</span><span class="cm">.</span><span
class="ci">Iterator</span></code> interface)
</li>
<li class="_4">removed <code class="fsharp"><span class="ci">anyCharOrNL</span></code> (no longer needed, see design changes above)</li>
<li class="_5">
removed <code class="fsharp"><span class="ci">nSatisfy</span></code> (can be replaced with <code class="fsharp"><span
class="ci">manySatisfyMinMax</span></code>)
</li>
<li class="_6">
removed <code class="fsharp"><span class="ci">unicodeDigit</span></code> and <code class="fsharp"><span
class="ci">unicodeNumber</span></code> (can be replaced with <code class="fsharp"><span class="ci">satisfy</span> <span
class="ci">System</span><span class="cm">.</span><span class="ci">Char</span><span class="cm">.</span><span
class="ci">IsDigit</span></code> and <code class="fsharp"><span class="ci">satisfy</span> <span class="ci">System</span><span
class="cm">.</span><span class="ci">Char</span><span class="cm">.</span><span class="ci">IsNumber</span></code>)
</li>
<li class="_7">
moved the helper functions <code class="fsharp"><span class="ci">expectedError</span></code>, <code class="fsharp"><span
class="ci">unexpectedError</span></code> etc. into the <code class="fsharp"><span class="ci">Error</span></code> module
</li>
</ul>
</li>
</ul>
</div>
<div class="para _4 lcinp">
<ul class="l1">
<li class="_1">
<p><code class="fsharp"><span class="ci">FParsec</span><span class="cm">.</span><span class="ci">CharStream</span></code>:</p>
<ul class="l2">
<li class="_1">string constructor takes more arguments</li>
<li class="_2">
<code class="fsharp"><span class="ci">Iterator</span><span class="cm">.</span><span class="ci">Peek</span><span class="cp">(</span><span
class="ci">i</span><span class="cp">)</span></code> now returns the <code class="fsharp"><span class="ci">EndOfStreamChar</span></code>
char instead of throwing an exception if the char peeked at lies before the beginning of the stream
</li>
</ul>
</li>
</ul>
</div>
</dd>
</dl>
</div>
</div>
</div>
</div>
<div id="v0_7_3_1" class="section s3">
<h2 class="title h3"><span>Version 0.7.3.1, 2009‒02‒26</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="multi-para l1">
<li class="_1">
<div class="para _1">
<p>
Fixed a bug in <code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span
class="ci">normalizeNewlines</span></code>/<code class="fsharp"><span class="ci">CharStream</span><span class="cm">.</span><span
class="ci">NormalizeNewlines</span></code>. This bug also affected the <code class="fsharp"><span class="ci">skipped</span></code> and <code
class="fsharp"><span class="ci">manyTillString</span></code> parsers, which internaly call <code class="fsharp"><span
class="ci">normalizeNewlines</span></code> to normalize the returned string.
</p>
</div>
<div class="para _2">
<p>The bug was reported by Greg Chapman ‐ thanks Greg!</p>
</div>
<div class="para _3">
<p>
When given a multi‐line string in which the lines are delimited by <code class="fsharp"><span class="cs"><span class="cld">"</span><span
class="ce">\r</span><span class="ce">\n</span><span class="crd">"</span></span></code> but the last line does not end in a newline, the buggy
<code class="fsharp"><span class="ci">normalizeNewlines</span></code> replaced the chars on the last line with <code class="fsharp"><span
class="cc"><span class="cld">'</span><span class="ce">\n</span><span class="crd">'</span></span></code> chars.
</p>
</div>
</li>
</ul>
</div>
<div class="para _2 lcinp">
<ul class="l1">
<li class="_1">
Changed the signature of <code class="fsharp"><span class="ci">Helper</span><span class="cm">.</span><span
class="ci">SkipOverWhitespace</span></code>.
</li>
</ul>
</div>
</div>
</div>
<div id="v0_7_3" class="section s3">
<h2 class="title h3"><span>Version 0.7.3, 2008‒12‒08</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<p>Breaking changes (all of which should have little or no impact on existing code bases):</p>
<ul class="l1">
<li class="_1">
<code class="fsharp"><span class="ci">CharStream</span><span class="cm">.</span><span class="ci">Iterator</span></code> instances now compare
equal if and only if they belong to the same <code class="fsharp"><span class="ci">CharStream</span></code> and point to the same index
(previously they compared only equal if their internal representations were identical)
</li>
<li class="_2">
the constructor argument of <code class="fsharp"><span class="ci">Error</span><span class="cm">.</span><span
class="ci">otherError</span></code> is now expected to be comparable with F#’s structural comparison function <code class="fsharp"><span
class="ci">compare</span></code>, see http://research.microsoft.com/fsharp/manual/spec2.aspx#_Toc207785725
</li>
<li class="_3">
the signature of the second <code class="fsharp"><span class="ci">ParserError</span><span class="cm">.</span><span
class="ci">ToString</span></code> overload has changed
</li>
<li class="_4">
<code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span class="ci">errorToString</span></code> and <code
class="fsharp"><span class="ci">printErrorLine</span></code> have been deprecated
</li>
</ul>
</div>
<div class="para _2 lcinp">
<p>New features:</p>
<ul class="l1">
<li class="_1">
reimplemented the error formatting code in <code class="fsharp"><span class="ci">FParsec</span><span class="cm">.</span><span
class="ci">Error</span></code>
</li>
<li class="_2">
added new <code class="fsharp"><span class="ci">State</span><span class="cp"><</span><span class="ci">_</span><span
class="cp">></span><span class="cp">.</span><span class="ci">AdvanceTo</span></code> and <code class="fsharp"><span
class="ci">CharStream</span><span class="cm">.</span><span class="ci">Iterator</span><span class="cm">.</span><span
class="ci">Advance</span></code> overloads
</li>
<li class="_3">
slightly modified the error reporting in <code class="fsharp"><span class="ci">Primitives</span><span class="cm">.</span><span
class="ci">sepEndBy</span></code>
</li>
<li class="_4">some documentation fixes</li>
</ul>
</div>
</div>
</div>
<div id="v0_7_2" class="section s3">
<h2 class="title h3"><span>Version 0.7.2, 2008‒11‒17</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
added <code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span class="ci">OperatorPrecedenceParser</span></code>
</li>
<li class="_2">
changed the overflow checking in <code class="fsharp"><span class="ci">pint32</span></code> such that it will not be affected by an expected
future change in F#’s <code class="fsharp"><span class="ci">int32</span> <span class="cr">-></span> <span class="ci">uint64</span></code>
conversion behaviour
</li>
<li class="_3">
added <code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span class="ci">pint16</span></code>, <code
class="fsharp"><span class="ci">puint16</span></code>, <code class="fsharp"><span class="ci">pint8</span></code>, <code class="fsharp"><span
class="ci">puint8</span></code>
</li>
<li class="_4">
changed the signatures in CharParser.fsi to use the <code class="fsharp"><span class="ci">Parser</span><span class="cp"><</span><span
class="ci">_</span><span class="cp">,</span><span class="ci">_</span><span class="cp">></span></code> type abbreviation
</li>
<li class="_5">
fixed outdated documentation of <code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span
class="ci">expectedError</span></code>
</li>
<li class="_6">some minor optimizations</li>
</ul>
</div>
</div>
</div>
<div id="v0_7_1" class="section s3">
<h2 class="title h3"><span>Version 0.7.1, 2008‒09‒29</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<p>Breaking changes:</p>
<ul class="l1">
<li class="_1">
renamed <code class="fsharp"><span class="ci">Primitives</span><span class="cm">.</span><span class="ci">Reply</span><span
class="cm">.</span><span class="ci">_tag</span></code> member to <code class="fsharp"><span class="ci">Flags</span></code> and gave it a proper
enumeration type
</li>
<li class="_2">
<code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span class="ci">State</span></code> is now a reference type
</li>
<li class="_3">
Removed <code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span class="ci">State</span><span
class="cm">.</span><span class="ci">Flags</span></code> member
</li>
<li class="_4">
deprecated <code class="fsharp"><span class="ci">Primitives</span><span class="cm">.</span><span class="ci">reconstructError</span></code>
</li>
</ul>
</div>
</div>
</div>
<div id="v0_7_0_1" class="section s3">
<h2 class="title h3"><span>Version 0.7.0.1, 2008‒09‒23</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<p>Breaking change:</p>
<ul class="l1">
<li class="_1">
changed the case of the <code class="fsharp"><span class="ci">FParsec</span><span class="cm">.</span><span class="ci">Error</span><span
class="cm">.</span><span class="ci">Pos</span></code> members (This wasn’t already done in 0.7 because of an oversight.)
</li>
</ul>
</div>
</div>
</div>
<div id="v0_7" class="section s3">
<h2 class="title h3"><span>Version 0.7.0, 2008‒09‒13</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<p>Bugfixes:</p>
<ul class="l1">
<li class="_1">
made <code class="fsharp"><span class="ci">FParsec</span><span class="cm">.</span><span class="ci">Error</span><span class="cm">.</span><span
class="ci">Pos</span></code> IComparable to prevent <code class="fsharp"><span class="ci">ParserError</span><span class="cm">.</span><span
class="ci">ToString</span></code> from throwing an exception under rare circumstances
</li>
<li class="_2">
corrected the argument checking for some <code class="fsharp"><span class="ci">CharStream</span><span class="cm">.</span><span
class="ci">Iterator</span></code> methods for very large arguments
</li>
</ul>
</div>
<div class="para _2 lcinp">
<p>New features:</p>
<ul class="l1">
<li class="_1">compatibility with the F# CTP release</li>
<li class="_2">
a configurable parser for number literals: <code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span
class="ci">numberLiteral</span></code>
</li>
<li class="_3">
<code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span class="ci">pfloat</span></code> now also parses <code
class="fsharp"><span class="ci">NaN</span></code>, <code class="fsharp"><span class="ci">Infinity</span></code> and hexadecimal floating point
literals as supported by IEEE754r, C99 and Java (but different from the hex representation supported by F#)
</li>
<li class="_4">
new helper functions <code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span
class="ci">floatToHexString</span></code>, <code class="fsharp"><span class="ci">floatOfHexString</span></code>, <code class="fsharp"><span
class="ci">float32ToHexString</span></code> and <code class="fsharp"><span class="ci">float32OfHexString</span></code>
</li>
<li class="_5">
integer parsers: <code class="fsharp"><span class="ci">Charparser</span><span class="cm">.</span><span class="ci">pint32</span></code>, <code
class="fsharp"><span class="ci">puint64</span></code>, <code class="fsharp"><span class="ci">puint32</span></code>, <code class="fsharp"><span
class="ci">puint64</span></code>
</li>
<li class="_6">new sample: a JSON parser</li>
<li class="_7">various optimizations and some code cleanup</li>
<li class="_8">
new <code class="fsharp"><span class="ci">CharStream</span><span class="cm">.</span><span class="ci">Iterator</span></code> members <code
class="fsharp"><span class="ci">ReadUntil</span></code>, <code class="fsharp"><span class="ci">Increment</span></code> and <code
class="fsharp"><span class="ci">Decrement</span></code>
</li>
<li class="_9">
new <code class="fsharp"><span class="ci">State</span></code> member <code class="fsharp"><span class="ci">AdvanceTo</span></code>
</li>
<li class="_0">
new function <code class="fsharp"><span class="ci">Primitives</span><span class="cm">.</span><span
class="ci">createParserForwardedToRef</span></code>
</li>
<li class="_1">
new combinator <code class="fsharp"><span class="co">|>>=</span></code> in <code class="fsharp"><span class="ci">Primitives</span></code>
</li>
</ul>
</div>
<div class="para _3 lcinp">
<p>Breaking changes:</p>
<ul class="l1">
<li class="_1">
renamed the parsers <code class="fsharp"><span class="ci">char</span></code> and <code class="fsharp"><span class="ci">string</span></code> to
<code class="fsharp"><span class="ci">pchar</span></code> and <code class="fsharp"><span class="ci">pstring</span></code> (This is in deference
to the built‐in F# functions <code class="fsharp"><span class="ci">char</span></code> and <code class="fsharp"><span
class="ci">string</span></code>, which weren’t yet around when the first version of FParsec was released.)
</li>
<li class="_2">
changed the case of the properties of the <code class="fsharp"><span class="ci">Reply</span></code> and <code class="fsharp"><span
class="ci">State</span></code> types (This reflects the emerging consensus in the F# community that all public members of types should be named
in PascalCase.)
</li>
<li class="_3">
deprecated <code class="fsharp"><span class="ci">State</span><span class="cm">.</span><span class="ci">AdvanceNL</span></code> (use the 3
parameter Advance overload instead)
</li>
<li class="_4">
deprecated the <code class="fsharp"><span class="ci">Primitives</span></code> helper functions <code class="fsharp"><span
class="ci">isOk</span></code>, <code class="fsharp"><span class="ci">isEmpty</span></code>, … (the <code class="fsharp"><span
class="ci">Reply</span></code> properties <code class="fsharp"><span class="ci">IsOk</span></code>, <code class="fsharp"><span
class="ci">IsEmpty</span></code>,… should be used instead)
</li>
<li class="_5">
deprecated the <code class="fsharp"><span class="ci">CharParser</span></code> helper functions <code class="fsharp"><span
class="ci">matchChar</span></code>, <code class="fsharp"><span class="ci">readChar</span></code>, … (the <code class="fsharp"><span
class="ci">State</span><span class="cm">.</span><span class="ci">Iter</span></code> methods <code class="fsharp"><span
class="ci">Match</span></code>, <code class="fsharp"><span class="ci">Read</span></code>, … should be used instead)
</li>
<li class="_6">
deprecated <code class="fsharp"><span class="ci">Primitives</span><span class="cm">.</span><span class="ci">option</span></code>, <code
class="fsharp"><span class="co"><|>$</span></code> should be used instead
</li>
<li class="_7">
made <code class="fsharp"><span class="ci">CharParser</span><span class="cm">.</span><span class="ci">CharList</span></code> internal (If you
need this helper class for your code, just copy the implementation to your source.)
</li>
<li class="_8">
<code class="fsharp"><span class="ci">State</span><span class="cm">.</span><span class="ci">Flags</span><span class="cp">()</span></code> now
has more bits (and less bits are reset on a position change)
</li>
</ul>
</div>
</div>
</div>
<div id="v0_6" class="section s3">
<h2 class="title h3"><span>Version 0.6.0, 2008‒05‒20</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
fixed a bug in <code class="fsharp"><span class="ci">manyTillString</span></code> (the code keeping track of newlines was buggy)
</li>
<li class="_2">
fixed a bug in <code class="fsharp"><span class="ci">CharParser</span><span class="co">.<?></span></code> (the error reporting was
inconsistent with <code class="fsharp"><span class="ci">Primitives</span><span class="co">.<?></span></code> in the rare case where <code
class="fsharp"><span class="co"><?></span></code> is applied inside an <code class="fsharp"><span class="ci">attempt</span> <span
class="cp">(</span><span class="co">...</span><span class="cp">)</span> <span class="co"><?></span> <span class="ci">label</span></code>
clause to a parser that returns an <code class="fsharp"><span class="ci">EmptyOk</span></code> reply)
</li>
<li class="_3">various changes for F# 1.9.4.15</li>
<li class="_4">
added <code class="fsharp"><span class="ci">skipped</span></code> parser to <code class="fsharp"><span class="ci">CharParser</span></code>
</li>
<li class="_5">
added <code class="fsharp"><span class="ci">nextCharSatifiesNot</span></code>, <code class="fsharp"><span
class="ci">prevCharSatifiesNot</span></code>, <code class="fsharp"><span class="ci">currCharSatisfies</span></code>, <code class="fsharp"><span
class="ci">currCharSatisfiesNot</span></code> to <code class="fsharp"><span class="ci">CharParser</span></code> module; the behaviours of the
existing <code class="fsharp"><span class="ci">nextCharSatisfies</span></code> and <code class="fsharp"><span
class="ci">prevCharSatisfies</span></code> were slightly changed (see <span class="tt">fparsec.html</span> for more details)
</li>
<li class="_6">
added <code class="fsharp"><span class="ci">TryWith</span></code> and <code class="fsharp"><span class="ci">TryFinally</span></code> members to
<code class="fsharp"><span class="ci">Primitivs</span><span class="cm">.</span><span class="ci">ParserCombinator</span></code>
</li>
<li class="_7">
added <code class="fsharp"><span class="ci">triple</span></code> and <code class="fsharp"><span class="ci">quad</span></code> parsers to <code
class="fsharp"><span class="ci">Primitives</span></code> module
</li>
<li class="_8">
set <code class="fsharp"><span class="ci">CompilationRepresentationFlags</span><span class="cm">.</span><span
class="ci">PermitNull</span></code> for <code class="fsharp"><span class="ci">Error</span><span class="cm">.</span><span
class="ci">ParserError</span></code>
</li>
<li class="_9">various optimizations</li>
<li class="_0">
some documentation fixes, including corrections for the docs of the <code class="fsharp"><span class="ci">CharParser</span></code> error
generation helper functions (<code class="fsharp"><span class="ci">expectedError</span></code> etc.)
</li>
</ul>
</div>
</div>
</div>
<div id="v0_5_1" class="section s3">
<h2 class="title h3"><span>Version 0.5.1, 2008‒01‒20</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
added <code class="fsharp"><span class="ci">pipe2</span></code>, <code class="fsharp"><span class="ci">pipe3</span></code> and <code
class="fsharp"><span class="ci">pipe4</span></code> primitives
</li>
<li class="_2">
replaced <code class="fsharp"><span class="ci">count</span></code> and <code class="fsharp"><span class="ci">skipCount</span></code> primitives
with optimized versions
</li>
<li class="_3">
minor optimizations in <code class="fsharp"><span class="ci">spaces</span></code> and <code class="fsharp"><span
class="ci">spaces1</span></code>
</li>
<li class="_4">added <code class="fsharp"><span class="ci">pfloat</span></code> char parser</li>
<li class="_5">minor documentation fixes</li>
</ul>
</div>
</div>
</div>
<div id="v0_5" class="section s3">
<h2 class="title h3"><span>Version 0.5.0, 2008‒01‒15</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
Major design change: all lazy computations were removed and the types <code class="fsharp"><span class="ci">Output</span></code> and <code
class="fsharp"><span class="ci">Reply</span></code> unified. The new implementation is considerably simpler and also compiles with F# 1.9.3.7.
</li>
<li class="_2">Fixed a bug in <span class="tt">build.bat</span> (reported by Santosh Zachariah ‐ thanks Santosh!)</li>
</ul>
</div>
</div>
</div>
<div id="v0_4_4" class="section s3">
<h2 class="title h3"><span>Version 0.4.4, 2008‒01‒13</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">fixed a minor issue in CharParser.attempt</li>
<li class="_2">
added <code class="fsharp"><span class="co">.>>!</span></code> and <code class="fsharp"><span class="co">>>.!</span></code>
primitives
</li>
<li class="_3">
added <code class="fsharp"><span class="ci">skipManySatisfy</span></code> and <code class="fsharp"><span
class="ci">skipMany1Satisfy</span></code> char parsers
</li>
</ul>
</div>
</div>
</div>
<div id="v0_4_3" class="section s3">
<h2 class="title h3"><span>Version 0.4.3, 2008‒01‒12</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
fixed bugs in the CharParser versions of <code class="fsharp"><span class="co"><?></span></code> and <code class="fsharp"><span
class="ci">attempt</span></code>.
</li>
<li class="_2">added <code class="fsharp"><span class="co">>>?</span></code> primitive</li>
<li class="_3">
added <code class="fsharp"><span class="ci">skipSatisfy</span></code> and <code class="fsharp"><span class="ci">skipSatisfyL</span></code> char
parsers
</li>
<li class="_4">minor documentation fixes</li>
</ul>
</div>
</div>
</div>
<div id="v0_4_2" class="section s3">
<h2 class="title h3"><span>Version 0.4.2, 2008‒01‒04</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">
performance improvements in <code class="fsharp"><span class="ci">CharStream</span><span class="cm">.</span><span
class="ci">Iterator</span></code>
</li>
<li class="_2">minor documentation fixes</li>
</ul>
</div>
</div>
</div>
<div id="v0_4_1" class="section s3">
<h2 class="title h3"><span>Version 0.4.1, 2008‒01‒02</span></h2>
<div class="intro i3">
<div class="para _1 lcinp">
<ul class="l1">
<li class="_1">documentation fixes</li>
<li class="_2">new sample application: a parser for Parsing Expression Grammars</li>
<li class="_3">
<code class="fsharp"><span class="ci">newline</span></code> and <code class="fsharp"><span class="ci">unicodeNewline</span></code> now return
<code class="fsharp"><span class="cc"><span class="cld">'</span><span class="ce">\n</span><span class="crd">'</span></span></code>, instead of
1 or 2
</li>
<li class="_4">
added <code class="fsharp"><span class="ci">whitespace</span></code> parser and changed <code class="fsharp"><span
class="ci">unicodeWhitespace</span></code>
</li>
<li class="_5">
added <code class="fsharp"><span class="ci">spaces</span></code> parser (equivalent to <code class="fsharp"><span
class="ci">skipManyChars</span> <span class="ci">whitespace</span></code>)
</li>
<li class="_6">
removed <code class="fsharp"><span class="ci">newlineRepl</span></code> parameter from <code class="fsharp"><span
class="ci">manyTillString</span></code>
</li>
<li class="_7">
added <code class="fsharp"><span class="ci">skipManyTill</span></code> and <code class="fsharp"><span
class="ci">skipManyCharsTill</span></code>
</li>
<li class="_8">generalized types of skipManyChars and skipManyChars1</li>
</ul>
</div>
</div>
</div>
<div id="v0_4" class="section s3">
<h2 class="title h3"><span>Version 0.4.0, 2007‒12‒30</span></h2>
<div class="intro i3">
<div class="para _1">
<p>Initial public release</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
================================================
FILE: Doc/html/about/contact.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Contact</title>
<link rel="stylesheet" type="text/css" media="all" href="../css/style.css" />
<link rel="stylesheet" type="text/css" media="screen" href="../css/screen-sidebar.css" />
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="../css/style-ie.css" />
<![endif]-->
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="all" href="../css/style-ie6.css" />
<![endif]-->
<link rel="stylesheet" type="text/css" media="print" href="../css/print.css" />
</head>
<body>
<div id="fixed-layer">
<div id="fixed-wrapper">
<div id="sidebar">
<div id="top-links"><span><a href="https://github.com/stephan-tolksdorf/fparsec">FParsec @ GitHub</a> | <a href="https://github.com/stephan-tolksdorf/fparsec/issues">Report a bug</a> | <a href="mailto:fparsec [at] quanttec.com?subject=FParsec&body=Hi Stephan,%0A%0A[your feedback]">Feedback</a></span></div>
<div id="nav-tree">
<table class="nav n1">
<tbody class="nav-open n1">
<tr class="nav-entry n1 _1">
<td class="nav-number n1"></td>
<td class="nav-title n1"><a href="../index.html">FParsec Documentation</a></td>
</tr>
<tr class="nav-subentries n1 _1">
<td class="nav-subentries-number n1"></td>
<td class="nav-subentries n1">
<table class="nav n2">
<tbody class="nav-open n2">
<tr class="nav-entry n2 _1">
<td class="nav-number n2"><a href="index.html"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="index.html">About FParsec</a></td>
</tr>
<tr class="nav-subentries n2 _1">
<td class="nav-subentries-number n2"></td>
<td class="nav-subentries n2">
<table class="nav n3">
<tbody class="nav-before-open n3">
<tr class="nav-entry n3 _1">
<td class="nav-number n3">
<a href="fparsec-vs-alternatives.html"><span class="section-number">1</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n3"><a href="fparsec-vs-alternatives.html">FParsec vs alternatives</a></td>
</tr>
<tr class="nav-entry n3 _2">
<td class="nav-number n3">
<a href="status-and-roadmap.html"><span class="section-number">2</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n3"><a href="status-and-roadmap.html">Status and roadmap</a></td>
</tr>
<tr class="nav-entry n3 _3">
<td class="nav-number n3"><a href="changelog.html"><span class="section-number">3</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="changelog.html">Changelog</a></td>
</tr>
</tbody>
<tbody class="nav-open selected n3">
<tr class="nav-entry selected n3 _4">
<td class="nav-number selected n3"><a href="#"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title selected n3"><a href="#">Contact</a></td>
</tr>
<tr class="nav-subentries selected n3 _4">
<td class="nav-subentries-number selected n3"></td>
<td class="nav-subentries selected n3">
<table class="nav n4">
<tbody class="nav-before-open n4">
<tr class="nav-entry n4 _1">
<td class="nav-number n4"><a href="#contact"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title n4"><a href="#contact">Contact</a></td>
</tr>
<tr class="nav-entry n4 _2">
<td class="nav-number n4"><a href="#impressum"><span class="section-number">2</span><span class="nav-space"></span></a></td>
<td class="nav-title n4"><a href="#impressum">Impressum</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
<tbody class="nav-after-open n2">
<tr class="nav-entry n2 _2">
<td class="nav-number n2"><a href="../license.html"><span class="section-number">2</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../license.html">License</a></td>
</tr>
<tr class="nav-entry n2 _3">
<td class="nav-number n2">
<a href="../download-and-installation.html"><span class="section-number">3</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n2"><a href="../download-and-installation.html">Download and installation</a></td>
</tr>
<tr class="nav-entry n2 _4">
<td class="nav-number n2"><a href="../tutorial.html"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../tutorial.html">Tutorial</a></td>
</tr>
<tr class="nav-entry n2 _5">
<td class="nav-number n2"><a href="../users-guide/index.html"><span class="section-number">5</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../users-guide/index.html">User’s Guide</a></td>
</tr>
<tr class="nav-entry n2 _6">
<td class="nav-number n2"><a href="../reference/index.html"><span class="section-number">6</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../reference/index.html">Reference</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<div id="copyright">
<span>Copyright © 2022 <a href="../about/contact.html">Stephan Tolksdorf</a></span>
</div>
</div>
</div>
</div>
<div id="wrapper">
<div id="main">
<div id="main-content">
<div id="breadcrumbs">
<span class="breadcrumbs">
<span id="breadcrumbs-parents"><a href="../index.html">FParsec Documentation</a><span class="breadcrumbs-sep"> > </span><a href="index.html">About FParsec</a></span><span class="breadcrumbs-sep"> > </span>Contact
</span>
</div>
<div class="section s2">
<h1 class="title h2"><span><span class="section-number">1.4</span> Contact</span></h1>
<div id="contact" class="section s3">
<h2 class="title h3"><span><span class="section-number">1.4.1</span> Contact</span></h2>
<div class="intro i3">
<div class="para _1">
<p>FParsec currently doesn’t have its own discussion forum or mailing list.<br /> (Please let me know if you’d like that to be changed.)</p>
</div>
<div class="para _2">
<p>
Currently the best place to get a quick answer to any FParsec‐related question is: <a
href="https://stackoverflow.com/search?q=fparsec">StackOverflow.com</a>.
</p>
</div>
<div class="para _3">
<p>
You can also email me (Stephan) directly at: <a href="mailto:fparsec [at] quanttec.com">fparsec [at] quanttec.com</a>. Please don’t hesitate to
contact me with any feedback or question regarding FParsec. I’m always happy to hear from FParsec users.
</p>
</div>
</div>
</div>
<div id="impressum" class="section s3">
<h2 class="title h3"><span><span class="section-number">1.4.2</span> Impressum</span></h2>
<div class="intro i3">
<div class="para _1">
<p><em>Author:</em> Stephan Tolksdorf</p>
</div>
<div class="para _2">
<p><em>Address:</em><br /> Geschwister‐Scholl‐Allee 253<br /> 25524 Itzehoe<br /> Germany<br /></p>
</div>
<div class="para _3">
<p><a href="mailto:fparsec [at] quanttec.com">fparsec [at] quanttec.com</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
================================================
FILE: Doc/html/about/fparsec-vs-alternatives.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>FParsec vs alternatives</title>
<link rel="stylesheet" type="text/css" media="all" href="../css/style.css" />
<link rel="stylesheet" type="text/css" media="screen" href="../css/screen-sidebar.css" />
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="../css/style-ie.css" />
<![endif]-->
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="all" href="../css/style-ie6.css" />
<![endif]-->
<link rel="stylesheet" type="text/css" media="print" href="../css/print.css" />
</head>
<body>
<div id="fixed-layer">
<div id="fixed-wrapper">
<div id="sidebar">
<div id="top-links"><span><a href="https://github.com/stephan-tolksdorf/fparsec">FParsec @ GitHub</a> | <a href="https://github.com/stephan-tolksdorf/fparsec/issues">Report a bug</a> | <a href="mailto:fparsec [at] quanttec.com?subject=FParsec&body=Hi Stephan,%0A%0A[your feedback]">Feedback</a></span></div>
<div id="nav-tree">
<table class="nav n1">
<tbody class="nav-open n1">
<tr class="nav-entry n1 _1">
<td class="nav-number n1"></td>
<td class="nav-title n1"><a href="../index.html">FParsec Documentation</a></td>
</tr>
<tr class="nav-subentries n1 _1">
<td class="nav-subentries-number n1"></td>
<td class="nav-subentries n1">
<table class="nav n2">
<tbody class="nav-open n2">
<tr class="nav-entry n2 _1">
<td class="nav-number n2"><a href="index.html"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="index.html">About FParsec</a></td>
</tr>
<tr class="nav-subentries n2 _1">
<td class="nav-subentries-number n2"></td>
<td class="nav-subentries n2">
<table class="nav n3">
<tbody class="nav-open selected n3">
<tr class="nav-entry selected n3 _1">
<td class="nav-number selected n3"><a href="#"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title selected n3"><a href="#">FParsec vs alternatives</a></td>
</tr>
</tbody>
<tbody class="nav-after-open n3">
<tr class="nav-entry n3 _2">
<td class="nav-number n3">
<a href="status-and-roadmap.html"><span class="section-number">2</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n3"><a href="status-and-roadmap.html">Status and roadmap</a></td>
</tr>
<tr class="nav-entry n3 _3">
<td class="nav-number n3"><a href="changelog.html"><span class="section-number">3</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="changelog.html">Changelog</a></td>
</tr>
<tr class="nav-entry n3 _4">
<td class="nav-number n3"><a href="contact.html"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="contact.html">Contact</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
<tbody class="nav-after-open n2">
<tr class="nav-entry n2 _2">
<td class="nav-number n2"><a href="../license.html"><span class="section-number">2</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../license.html">License</a></td>
</tr>
<tr class="nav-entry n2 _3">
<td class="nav-number n2">
<a href="../download-and-installation.html"><span class="section-number">3</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n2"><a href="../download-and-installation.html">Download and installation</a></td>
</tr>
<tr class="nav-entry n2 _4">
<td class="nav-number n2"><a href="../tutorial.html"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../tutorial.html">Tutorial</a></td>
</tr>
<tr class="nav-entry n2 _5">
<td class="nav-number n2"><a href="../users-guide/index.html"><span class="section-number">5</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../users-guide/index.html">User’s Guide</a></td>
</tr>
<tr class="nav-entry n2 _6">
<td class="nav-number n2"><a href="../reference/index.html"><span class="section-number">6</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../reference/index.html">Reference</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<div id="copyright">
<span>Copyright © 2022 <a href="../about/contact.html">Stephan Tolksdorf</a></span>
</div>
</div>
</div>
</div>
<div id="wrapper">
<div id="main">
<div id="main-content">
<div id="breadcrumbs">
<span class="breadcrumbs">
<span id="breadcrumbs-parents"><a href="../index.html">FParsec Documentation</a><span class="breadcrumbs-sep"> > </span><a href="index.html">About FParsec</a></span><span class="breadcrumbs-sep"> > </span>FParsec vs alternatives
</span>
</div>
<div class="section s2">
<h1 class="title h2"><span><span class="section-number">1.1</span> FParsec vs alternatives</span></h1>
<div class="intro i2">
<div class="para _1">
<p>
The following tables contain a bullet‐point comparison between FParsec and the two main alternatives for parsing with F#: parser generator tools
(e.g. fslex & fsyacc) and “hand‐written” recursive descent parsers.
</p>
</div>
<div class="para _2 lcinp">
<div id="relative-advantages" class="table">
<table cellspacing="0">
<caption>
<span class="table-caption-prefix">Table <span class="table-number">1.1.1</span>: </span><span class="table-title">Relative advantages</span>
</caption>
<thead>
<tr class="_1">
<th class="_1">Parser‐generator tools</th>
<th class="_2">FParsec</th>
<th class="_3">Hand‐written<br /> recursive‐descent parser</th>
</tr>
</thead>
<tbody>
<tr class="_1">
<td class="_1">
<ul class="l1">
<li class="_1">Declarative and easy‐to‐read syntax</li>
<li class="_2">Ensures adherence to grammar formalism</li>
<li class="_3">Can check for certain kinds of ambiguity in grammar</li>
<li class="_4">
You don’t have to think about performance. Either the generated parser is fast enough, or not. There’s not much you can do about it.
</li>
</ul>
</td>
<td class="_2">
<ul class="l1">
<li class="_1">Implemented as F# library, so no extra tools or build steps</li>
<li class="_2">Parsers are first‐class values within the language</li>
<li class="_3">Succinct and expressive syntax</li>
<li class="_4">Modular and easily extensible</li>
<li class="_5">Extensive set of predefined parsers and combinators</li>
<li class="_6">Semi‐automatically generated, highly readable error messages</li>
<li class="_7">Supports arbitrary lookahead and backtracking</li>
<li class="_8">Runtime‐configurable operator‐precedence parser component</li>
<li class="_9">Does not require a pre‐parsing tokenization phase</li>
<li class="_0">Comprehensive documentation</li>
<li class="_1">Extensively unit‐tested</li>
</ul>
</td>
<td class="_3">
<ul class="l1">
<li class="_1">No extra tools or build steps</li>
<li class="_2">Most amenable to individual requirements</li>
<li class="_3">Potentially as fast as technically possible</li>
<li class="_4">Parsers are relatively portable if you stick to simple language features and keep library dependencies to a minimum</li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="para _3 lcinp">
<div id="relative-disadvantages" class="table">
<table cellspacing="0">
<caption>
<span class="table-caption-prefix">Table <span class="table-number">1.1.2</span>: </span><span class="table-title">Relative
disadvantages</span>
</caption>
<thead>
<tr class="_1">
<th class="_1">Parser‐generator tools</th>
<th class="_2">FParsec</th>
<th class="_3">Hand‐written<br /> recursive‐descent parser</th>
</tr>
</thead>
<tbody>
<tr class="_1">
<td class="_1">
<ul class="l1">
<li class="_1">Restricted to features of grammar formalism</li>
<li class="_2">Extra tools and compilation steps</li>
<li class="_3">Reliance on opaque generator tool, that is often hard to debug, optimize or extend</li>
<li class="_4">Static grammar that can’t be changed at runtime</li>
<li class="_5">Often hard to generate good error messages</li>
<li class="_6">Many tools generate comparatively slow parsers</li>
<li class="_7">Some tools have only limited Unicode support</li>
<li class="_8">Portability problems</li>
</ul>
</td>
<td class="_2">
<ul class="l1">
<li class="_1">Tradeoff between declarativeness and performance</li>
<li class="_2">Syntax less readable than PEG or Regular Expression syntax</li>
<li class="_3"><a href="https://en.wikipedia.org/wiki/Left_recursion">Left‐recursive</a> grammar rules have to be rewritten</li>
<li class="_4">Does not support a pre‐parsing tokenization phase</li>
<li class="_5">You have to learn the API</li>
<li class="_6">Limited to F#</li>
<li class="_7">Code‐dependence on FParsec</li>
<li class="_8">Aggressive performance optimizations add complexity to parts of the lower‐level FParsec source code</li>
</ul>
</td>
<td class="_3">
<ul class="l1">
<li class="_1">You have to write everything yourself, which can take a lot of effort</li>
<li class="_2">Implementing (fast) parsers requires some experience</li>
<li class="_3">
Expression (sub)grammars with infix operators can be ugly and inefficient to parse with a pure recursive‐descent parser, so you might also
have to write some kind of embedded operator precedence parser
</li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
================================================
FILE: Doc/html/about/index.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>About FParsec</title>
<link rel="stylesheet" type="text/css" media="all" href="../css/style.css" />
<link rel="stylesheet" type="text/css" media="screen" href="../css/screen-sidebar.css" />
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="../css/style-ie.css" />
<![endif]-->
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="all" href="../css/style-ie6.css" />
<![endif]-->
<link rel="stylesheet" type="text/css" media="print" href="../css/print.css" />
</head>
<body>
<div id="fixed-layer">
<div id="fixed-wrapper">
<div id="sidebar">
<div id="top-links"><span><a href="https://github.com/stephan-tolksdorf/fparsec">FParsec @ GitHub</a> | <a href="https://github.com/stephan-tolksdorf/fparsec/issues">Report a bug</a> | <a href="mailto:fparsec [at] quanttec.com?subject=FParsec&body=Hi Stephan,%0A%0A[your feedback]">Feedback</a></span></div>
<div id="nav-tree">
<table class="nav n1">
<tbody class="nav-open n1">
<tr class="nav-entry n1 _1">
<td class="nav-number n1"></td>
<td class="nav-title n1"><a href="../index.html">FParsec Documentation</a></td>
</tr>
<tr class="nav-subentries n1 _1">
<td class="nav-subentries-number n1"></td>
<td class="nav-subentries n1">
<table class="nav n2">
<tbody class="nav-open selected n2">
<tr class="nav-entry selected n2 _1">
<td class="nav-number selected n2"><a href="#"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title selected n2"><a href="#">About FParsec</a></td>
</tr>
<tr class="nav-subentries selected n2 _1">
<td class="nav-subentries-number selected n2"></td>
<td class="nav-subentries selected n2">
<table class="nav n3">
<tbody class="nav-before-open n3">
<tr class="nav-entry n3 _1">
<td class="nav-number n3">
<a href="fparsec-vs-alternatives.html"><span class="section-number">1</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n3"><a href="fparsec-vs-alternatives.html">FParsec vs alternatives</a></td>
</tr>
<tr class="nav-entry n3 _2">
<td class="nav-number n3">
<a href="status-and-roadmap.html"><span class="section-number">2</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n3"><a href="status-and-roadmap.html">Status and roadmap</a></td>
</tr>
<tr class="nav-entry n3 _3">
<td class="nav-number n3"><a href="changelog.html"><span class="section-number">3</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="changelog.html">Changelog</a></td>
</tr>
<tr class="nav-entry n3 _4">
<td class="nav-number n3"><a href="contact.html"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="contact.html">Contact</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
<tbody class="nav-after-open n2">
<tr class="nav-entry n2 _2">
<td class="nav-number n2"><a href="../license.html"><span class="section-number">2</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../license.html">License</a></td>
</tr>
<tr class="nav-entry n2 _3">
<td class="nav-number n2">
<a href="../download-and-installation.html"><span class="section-number">3</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n2"><a href="../download-and-installation.html">Download and installation</a></td>
</tr>
<tr class="nav-entry n2 _4">
<td class="nav-number n2"><a href="../tutorial.html"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../tutorial.html">Tutorial</a></td>
</tr>
<tr class="nav-entry n2 _5">
<td class="nav-number n2"><a href="../users-guide/index.html"><span class="section-number">5</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../users-guide/index.html">User’s Guide</a></td>
</tr>
<tr class="nav-entry n2 _6">
<td class="nav-number n2"><a href="../reference/index.html"><span class="section-number">6</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../reference/index.html">Reference</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<div id="copyright">
<span>Copyright © 2022 <a href="../about/contact.html">Stephan Tolksdorf</a></span>
</div>
</div>
</div>
</div>
<div id="wrapper">
<div id="main">
<div id="main-content">
<div id="breadcrumbs">
<span class="breadcrumbs">
<span id="breadcrumbs-parents"><a href="../index.html">FParsec Documentation</a></span><span class="breadcrumbs-sep"> > </span>About FParsec
</span>
</div>
<div class="section s1">
<h1 class="title h1"><span><span class="section-number">1</span> About FParsec</span></h1>
<div class="intro i1">
<div class="local-toc">
<div class="toc-toc-title">
Contents
</div>
<table class="toc t1">
<tr class="toc-entry toc t1 _0">
<td class="toc-number toc t1"><a href="fparsec-vs-alternatives.html"><span class="toc-number">1</span><span class="toc-space"></span></a></td>
<td class="toc-title toc t1"><a href="fparsec-vs-alternatives.html">FParsec vs alternatives</a></td>
</tr>
<tr class="toc-entry toc t1 _1">
<td class="toc-number toc t1"><a href="status-and-roadmap.html"><span class="toc-number">2</span><span class="toc-space"></span></a></td>
<td class="toc-title toc t1"><a href="status-and-roadmap.html">Status and roadmap</a></td>
</tr>
<tr class="toc-entry toc t1 _2">
<td class="toc-number toc t1"><a href="changelog.html"><span class="toc-number">3</span><span class="toc-space"></span></a></td>
<td class="toc-title toc t1"><a href="changelog.html">Changelog</a></td>
</tr>
<tr class="toc-entry toc t1 _3">
<td class="toc-number toc t1"><a href="contact.html"><span class="toc-number">4</span><span class="toc-space"></span></a></td>
<td class="toc-title toc t1"><a href="contact.html">Contact</a></td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
================================================
FILE: Doc/html/about/status-and-roadmap.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Status and roadmap</title>
<link rel="stylesheet" type="text/css" media="all" href="../css/style.css" />
<link rel="stylesheet" type="text/css" media="screen" href="../css/screen-sidebar.css" />
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="../css/style-ie.css" />
<![endif]-->
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="all" href="../css/style-ie6.css" />
<![endif]-->
<link rel="stylesheet" type="text/css" media="print" href="../css/print.css" />
</head>
<body>
<div id="fixed-layer">
<div id="fixed-wrapper">
<div id="sidebar">
<div id="top-links"><span><a href="https://github.com/stephan-tolksdorf/fparsec">FParsec @ GitHub</a> | <a href="https://github.com/stephan-tolksdorf/fparsec/issues">Report a bug</a> | <a href="mailto:fparsec [at] quanttec.com?subject=FParsec&body=Hi Stephan,%0A%0A[your feedback]">Feedback</a></span></div>
<div id="nav-tree">
<table class="nav n1">
<tbody class="nav-open n1">
<tr class="nav-entry n1 _1">
<td class="nav-number n1"></td>
<td class="nav-title n1"><a href="../index.html">FParsec Documentation</a></td>
</tr>
<tr class="nav-subentries n1 _1">
<td class="nav-subentries-number n1"></td>
<td class="nav-subentries n1">
<table class="nav n2">
<tbody class="nav-open n2">
<tr class="nav-entry n2 _1">
<td class="nav-number n2"><a href="index.html"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="index.html">About FParsec</a></td>
</tr>
<tr class="nav-subentries n2 _1">
<td class="nav-subentries-number n2"></td>
<td class="nav-subentries n2">
<table class="nav n3">
<tbody class="nav-before-open n3">
<tr class="nav-entry n3 _1">
<td class="nav-number n3">
<a href="fparsec-vs-alternatives.html"><span class="section-number">1</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n3"><a href="fparsec-vs-alternatives.html">FParsec vs alternatives</a></td>
</tr>
</tbody>
<tbody class="nav-open selected n3">
<tr class="nav-entry selected n3 _2">
<td class="nav-number selected n3"><a href="#"><span class="section-number">2</span><span class="nav-space"></span></a></td>
<td class="nav-title selected n3"><a href="#">Status and roadmap</a></td>
</tr>
<tr class="nav-subentries selected n3 _2">
<td class="nav-subentries-number selected n3"></td>
<td class="nav-subentries selected n3">
<table class="nav n4">
<tbody class="nav-before-open n4">
<tr class="nav-entry n4 _1">
<td class="nav-number n4"><a href="#status"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title n4"><a href="#status">Status</a></td>
</tr>
<tr class="nav-entry n4 _2">
<td class="nav-number n4">
<a href="#future-development"><span class="section-number">2</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n4"><a href="#future-development">Future development</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
<tbody class="nav-after-open n3">
<tr class="nav-entry n3 _3">
<td class="nav-number n3"><a href="changelog.html"><span class="section-number">3</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="changelog.html">Changelog</a></td>
</tr>
<tr class="nav-entry n3 _4">
<td class="nav-number n3"><a href="contact.html"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="contact.html">Contact</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
<tbody class="nav-after-open n2">
<tr class="nav-entry n2 _2">
<td class="nav-number n2"><a href="../license.html"><span class="section-number">2</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../license.html">License</a></td>
</tr>
<tr class="nav-entry n2 _3">
<td class="nav-number n2">
<a href="../download-and-installation.html"><span class="section-number">3</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n2"><a href="../download-and-installation.html">Download and installation</a></td>
</tr>
<tr class="nav-entry n2 _4">
<td class="nav-number n2"><a href="../tutorial.html"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../tutorial.html">Tutorial</a></td>
</tr>
<tr class="nav-entry n2 _5">
<td class="nav-number n2"><a href="../users-guide/index.html"><span class="section-number">5</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../users-guide/index.html">User’s Guide</a></td>
</tr>
<tr class="nav-entry n2 _6">
<td class="nav-number n2"><a href="../reference/index.html"><span class="section-number">6</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="../reference/index.html">Reference</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<div id="copyright">
<span>Copyright © 2022 <a href="../about/contact.html">Stephan Tolksdorf</a></span>
</div>
</div>
</div>
</div>
<div id="wrapper">
<div id="main">
<div id="main-content">
<div id="breadcrumbs">
<span class="breadcrumbs">
<span id="breadcrumbs-parents"><a href="../index.html">FParsec Documentation</a><span class="breadcrumbs-sep"> > </span><a href="index.html">About FParsec</a></span><span class="breadcrumbs-sep"> > </span>Status and roadmap
</span>
</div>
<div class="section s2">
<h1 class="title h2"><span><span class="section-number">1.2</span> Status and roadmap</span></h1>
<div id="status" class="section s3">
<h2 class="title h3"><span><span class="section-number">1.2.1</span> Status</span></h2>
<div class="intro i3">
<div class="para _1">
<p>FParsec has been in development for several years and can now be considered “stable”.</p>
</div>
<div class="para _2">
<p>Version 1.0 of FParsec was released on 19 July 2012.</p>
</div>
<div class="para _3 lcinp">
<div class="admonition">
<div class="admonition-title">Note</div>
<div class="admonition-body">
<div class="para _1">
<p>
Although FParsec has rather comprehensive unit tests (with code coverage close to 100% for many components), it likely still contains bugs.
If you want to use FParsec in a production environment, you need to test your parsers thoroughly.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="future-development" class="section s3">
<h2 class="title h3"><span><span class="section-number">1.2.2</span> Future development</span></h2>
<div class="intro i3">
<div class="para _1">
<p>There are no firm plans for any major new features yet.</p>
</div>
<div class="para _2">
<p>
One goal for the future development of FParsec is to support a more declarative parser definition syntax without compromising on FParsec’s
performance or language‐integrated nature.
</p>
</div>
<div class="para _3">
<p>
For example, it would be nice if FParsec provided a way to automatically create optimized lexer functions from a series of typed regular
expressions and associated mapping functions, ideally at compile time. Using such a feature could maybe look similar to
</p>
</div>
<div class="para _4 lcinp">
<pre class="code fsharp"><span class="ck">let</span> <span class="ci">lexer</span> <span class="cp">:</span> <a href="../reference/primitives.html#members.Parser"><span class="ci">Parser</span></a><span class="cp"><</span><span class="ci">AstNode</span><span class="cp">,</span> <span class="ctv">'u</span><span class="cp">></span> <span class="cp">=</span>
<span class="ci">lex</span> <span class="cp">[</span><span class="cs"><span class="cld">"</span>regex-with-1-capture-group<span class="crd">"</span></span><span class="cp">,</span> <span class="cp">(</span><span class="ck">fun</span> <span class="ci">x</span> <span class="cr">-></span> <span class="ci">AstNode1</span><span class="cp">(</span><span class="ci">x</span><span class="cp">)</span><span class="cp">)</span>
<span class="cs"><span class="cld">"</span>regex-with-2-capture-groups<span class="crd">"</span></span><span class="cp">,</span> <span class="cp">(</span><span class="ck">fun</span> <span class="ci">x</span> <span class="ci">y</span> <span class="cr">-></span> <span class="ci">AstNode2</span><span class="cp">(</span><span class="ci">x</span><span class="cp">,</span> <span class="ci">y</span><span class="cp">)</span><span class="cp">)</span>
<span class="cbc"><span class="cld">(*</span> ... <span class="crd">*)</span></span><span class="cp">]</span>
</pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
================================================
FILE: Doc/html/css/print.css
================================================
/*
#wrapper {
max-width: none;
}
*/
a, a code {
color: #000000;
text-decoration: underline;
}
code, .code {
background-color: transparent;
}
code a, .code a {
color: #000000;
text-decoration: none;
border: 0;
}
span.ck /* keyword */ /*, span.cb, span.cnu */ {
color: #000000;
}
span.cr /* right arrow */ {
color: #000000;
}
span.cc /* char literal */, span.cs /* string literal */ {
color: #000000;
}
span.ce /* escaped char */ {
color: #000000;
}
span.clc /* line comment*/, span.cbc /* block comment */ {
color: #000000;
}
.interface-member-code pre {
overflow: visible;
white-space: pre;
word-wrap: normal;
}
.interface-member-description {
padding-left: 1em;
}
.interface-member-backlink {
display: none;
}
================================================
FILE: Doc/html/css/screen-sidebar.css
================================================
body {
background-color: #e9e9e9;
}
html {
height: 100%;
overflow-y: scroll;
}
body {
height: 100%;
}
#fixed-layer {
display: block;
position: fixed;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
overflow: hidden;
}
#wrapper {
height: 100%;
min-height: 100%;
max-width: 73em;
margin-left: auto;
margin-right: auto;
}
#fixed-wrapper {
position: relative;
max-width: 73em;
width: 100%;
height: 100%;
margin-left: auto;
margin-right: auto;
background-color: #ffffff;
border: solid 1px #d9d9d9;
}
#sidebar {
position: absolute;
z-index: 2;
left: 0;
top: 0;
width: 22.5em;
height: 100%;
overflow: auto;
}
#main {
position: relative;
z-index: 3;
left: 0;
top: 0;
min-height: 100%;
min-width: 40em;
margin-left: 22.5em;
background-color: #ffffff;
border-left: solid 1px #d9d9d9;
}
#main-content {
padding: 0 1.5em 1.5em 1.5em;
}
#top-links {
margin-left: 1.5em;
padding-top: 0.5em;
margin-bottom: 0.5em;
margin-top: -0.07143em;
}
#top-links span {
font-size: 0.9286em;
color: #333;
}
#top-links a {
color: #333;
}
#nav-tree {
margin-left: 1.5em;
margin-right: 1.5em;
margin-top: 1.5em;
}
#nav-tree > table {
margin-top: -0.07143em;
}
#nav-tree table,
#nav-tree td.nav-title {
width: 100%;
}
.nav-entry td.n1 {
font-size: 1.5em;
padding-bottom: 0.6667em;
line-height: 1em;
}
.nav-entry td.n1 a {
color: #000000;
}
.nav-number {
white-space: nowrap;
min-width: 1em;
}
.nav-number.n1 {
min-width: 0;
}
.nav-number a {
padding-right: 0.5em;
}
.nav-number {
text-align: right; /* must be right, even for left aligned number (for a continuous underline between number and title) */
}
.nav-space {
display: none;
/*uncomment for left-aligned numbers*/
/*
display: inline-block;
width: 100%;
height: 0px;
vertical-align: middle;
*/
}
tbody.selected {
background-color: #f8f8f8;
}
.nav-entry a {
outline: none;
}
.nav-entry .selected a {
color: #000000;
}
.nav-entry:hover a {
text-decoration: none;
border-bottom: 1px solid;
}
#copyright {
margin-left: 1.5em;
margin-top: 0.8em;
}
#copyright span {
font-size: 0.9286em;
margin-left: 0.1em;
color: #333;
}
#copyright a {
color: #333;
}
================================================
FILE: Doc/html/css/style-ie.css
================================================
code {
white-space: nowrap; /* pre breaks the layout, even in ie8 */
}
================================================
FILE: Doc/html/css/style-ie6.css
================================================
#fixed-layer {
display: none;
}
#main {
margin-left: 0;
border-right: solid 1px #d9d9d9;
}
================================================
FILE: Doc/html/css/style.css
================================================
/* reset */
html, body, div, span, h1, h2, h3, h4, h5, h6, p,
pre, a, code, em, strong, img, dl, dt, dd, ol, ul, li,
table, caption, thead, tbody, tfoot, th, tr, td {
margin: 0;
padding: 0;
border: 0;
font-family: inherit;
font-size: 100%;
font-weight: inherit;
font-style: inherit;
vertical-align: baseline;
text-align:left;
text-decoration: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
/* layout */
#fixed-layer {
display: none;
}
#wrapper {
max-width: 47.5em;
margin-left: auto;
margin-right: auto;
}
pre {
overflow:auto;
}
.interface-member-code pre {
overflow: visible;
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
/* typography */
body {
font-family: "Cambria", "Georgia", "Palatino", "Palatino Linotype", "Times", "Times New Roman", serif;
font-size: 87.5%; /* 14px */
line-height: 1.429em;
}
pre, code, .tt {
font-family: Consolas, "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Lucida Sans Typewriter", "Courier New", "Courier"; /* can't put monospace in there because otherwise WebKit browsers would change the default size */
font-size: 0.9286em; /* 13px */
font-size-adjust: 0.461; /* at the same font size Consolas and Courier New have a considerably smaller x-height than the other fonts*/
line-height: 1.25em;
}
.title .section-number {
/* Georgia's old-style figures don't look good in section numbers like 1.2.3.4 */
font-family: "Cambria", /* "Georgia", */ "Palatino", "Palatino Linotype", "Times", "Times New Roman", serif;
}
h1, h2, h3, h4, h5, h6 {
font-weight: normal; /* for IE */
}
h1 {
font-size: 1.7143em;
line-height: 1em;
margin-top: 0.75em;
margin-bottom: 0.5833em;
}
h2, h3 {
font-size: 1.5em;
line-height: 1em;
margin-top: 1em;
margin-bottom: 0.6666em;
}
.para {
margin-bottom: 1em;
}
ul, ol {
padding-left: 2em;
}
ul { list-style-type: disc; }
ol { list-style-type: decimal; }
ul.l2 { list-style-type: circle; }
ul.l3 { list-style-type: square; }
ul.l4 { list-style-type: circle; }
ul.l5 { list-style-type: square; }
div.dl {
margin-top: 1em;
margin-bottom: 1em;
}
.dl-title {
font-size: 1.3em;
line-height: 1em;
}
dt {
margin-top: 1em;
font-style: italic;
}
dd {
padding-left: 2em;
}
dd > .para > ul:first-child {
padding-left: 0em;
}
.fn-title {
font-weight: bold;
margin-top: 3em;
margin-bottom: 0.5em;
}
th.fn {
padding-right: 1em;
}
th.fn, td.fn {
padding-bottom: 1em;
}
em, .i {
font-style: italic;
}
strong, .b {
font-weight: bold;
}
.s {
text-decoration: line-through;
}
.small {
font-size: 0.9em;
}
sup {
font-size: 0.85em;
line-height: 1em;
}
sup.fn-mark {
font-size: 0.8em;
line-height: 1em;
}
/* design */
#breadcrumbs {
padding-top: 0.5em;
margin-bottom: 0.5em;
}
.toc-toc-title {
font-size: 1.5em;
line-height: 1em;
margin-top: 1em;
margin-bottom: 0.3333em;
}
.local-toc ol {
list-style-type:none;
padding-left: 0;
}
td.toc-title {
width: 100%;
}
.toc-number {
white-space: nowrap;
min-width: 1em;
}
.toc-number a {
padding-right: 0.5em;
}
.toc-number {
text-align: right; /* must be right, even for left aligned number (for a continuous underline between number and title) */
}
.toc-space {
display: none;
/*uncomment for left-aligned numbers*/
/*
display: inline-block;
width: 100%;
height: 0px;
vertical-align: middle;
*/
}
.toc-entry .selected a {
color: #000000;
}
.toc-entry a {
outline: none;
}
.toc-entry:hover a {
text-decoration: none;
border-bottom: 1px solid;
}
a {
color: #003399;
}
a:hover {
border-bottom-style: solid;
border-bottom-width: 1px;
}
a:target, span:target, a:target code, span:target code,
.interface-member:target > .interface-member-code .interface-member-marker,
.table:target > table > caption .table-title {
background-color: #dddddd;
}
div:target > .title > span, div:target > .title > span > code {
background-color: #e4e4e4;
}
.para.lcinp + .para>.admonition {
margin-top: 1.36em;
}
.admonition {
border-top: 1px solid #999999;
border-bottom: 1px solid #999999;
padding-top: 0.2em;
padding-bottom: 0.3em;
margin-top: 1em;
margin-bottom: 1em;
}
.admonition-title {
font-weight: bold;
font-style: italic;
}
.admonition .para {
margin-top: 1em;
margin-bottom: 0em;
}
.admonition .para._1 {
margin-top: 0em;
}
code {
white-space: pre;
margin-left: 1px;
margin-right: 1px;
background-color: #f8f8f8;
}
.code {
background-color : #f8f8f8;
padding-bottom: 4px;
}
.code + .code {
border-top: 1px solid #dcdcdc;
padding-top: 3px;
}
p + .code {
margin-top: 1px;
}
.code + p {
margin-top: 1px;
}
.interface-member-code .code, .interface-code .code {
padding: 2px;
border-top: 1px solid #dcdcdc;
border-bottom: 1px solid #dcdcdc;
}
code a, .code a {
color: #000000;
text-decoration: none;
border-bottom: 1px dashed #c8c8c8;
}
code a:hover, .code a:hover {
text-decoration: none;
border-bottom-style: solid;
}
a code, .title code {
color: inherit;
background-color: transparent;
}
.title code a {
border-bottom-style:none;
}
.title code a:hover {
border-bottom-style:solid;
}
a code span, .title code span {
color: inherit !important;
}
/*
.cb: boolean literal
.cbc: block comment
.cc: char literal
.ce: escaped char
.cei: escaped identifier
.ci: identifier
.cin: invalid
.ck: keyword
.clc: line comment
.cm: member access/scope resolution operator
.cn: number literal
.cnu: null literal
.co: operator
.col: other literal
.cp: punctuation
.cpr: preprocessor
.cr: right arrow (in functional languages)
.cra: range operator/ ellipsis
.cre: reserved
.cs: string literal
.ctv: type variable
.cv: void
*/
span.ci /* identifier */,
span.tv /* type variable */,
span.cb /* boolean literal */,
span.cn /* number literal */,
span.cnu /* null literal */,
span.cp /* punctuation */,
span.cra /* range operator/ ellipsis */,
span.cm /* member access/scope resolution operator */,
span.co /* operator */ {
color: #000000;
}
span.ck /* keyword */, span.cbt, span.cv {
color: #0048a0;
}
span.cr /* right arrow */ {
color: #0048a0;
}
span.cc /* char literal */, span.cs /* string literal */ {
color: #940c00;
}
span.ce /* escaped char */ {
color: #d0532c;
}
span.clc /* line comment*/, span.cbc /* block comment */ {
color: #007e1e;
}
span.cin /* invalid */ {
color: White;
background-color: red;
}
span.cpr /* preprocessor */ {
color: #009293;
}
/* the following definitions are for debugging the syntax highlighter */
/*
span.cp {
color: red;
}
span.co {
color: Fuchsia;
}
*/
/* interface reference */
.interface-member {
margin-bottom: 2em;
}
.interface-member-code {
margin-bottom: 0.5em;
}
.interface-member-backlink {
float: right;
color: #000000;
font-family: "Lucida Sans Unicode", "Lucida Grande", "Lucida Sans", "DejaVu Sans", sans-serif;
text-decoration: none;
font-size: 16px;
line-height: 20px;
margin-bottom: -2px;
}
.interface-member-backlink:hover {
border-bottom: 0;
}
.interface-member-description {
padding-left: 2.075em;
}
.interface-member-marker {
font-weight: bold;
}
.interface-member-marker .ck {
color: #003C85;
}
/* tables */
.table {
margin-top: 0.2em;
}
.table table {
width: 100%;
border-top: 1px solid #000000;
border-bottom: 1px solid #000000;
}
.table thead th {
font-size: 1.1em;
font-weight: bold;
border-top: 1px solid #000000;
border-bottom: 1px solid #000000;
}
.table .table-caption-prefix {
font-style: normal;
margin-right: 0.2em;
font-weight: bold;
}
.table caption {
font-style: italic;
padding-bottom: 0.3em;
}
.table td, .api-table th {
padding-top: 0.3em;
padding-bottom: 0.2em;
}
.table tbody td {
border-top: 1px solid #dddddd;
}
.table td._1 {
padding-right: 1em;
}
.api-table {
margin-top: 2em;
}
#v0_9\.renamings caption {
display: none;
}
.table td > ul {
padding-left: 1em;
}
#relative-advantages thead th { padding-left: 1em; }
#relative-advantages td._1 { width: 34%; padding-right: 1em; }
#relative-advantages td._2 { width: 35%; padding-right: 1em; }
#relative-disadvantages { margin-top: 1.5em; }
#relative-disadvantages thead th { padding-left: 1em; }
#relative-disadvantages td._1 { width: 34%; padding-right: 1em; }
#relative-disadvantages td._2 { width: 35%; padding-right: 1em; }
/* parser overview tables */
#parsing-single-chars td._1 { width: 35%; }
#parsing-strings-directly td._1 { width: 38.5%; }
#parsing-strings-with-the-help-of-other-parsers td._1 { width: 36%; }
#parsing-whitespace td._1 { width: 35%; }
#chaining-and-piping-parsers td._1 { width: 27%; }
#parsing-sequences td._1 { width: 23%; }
#parsing-sequences td._2 { width: 22%; }
#parsing-alternatives-and-recovering-from-errors td._1 { width: 28%; }
#conditional-parsing-and-looking-ahead td._1 { width: 35%; }
#customizing-error-messages td._1 { width: 28%; }
#user-state-handling-and-getting-the-input-stream-position td._1 { width: 24%; }
================================================
FILE: Doc/html/download-and-installation.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Download and installation</title>
<link rel="stylesheet" type="text/css" media="all" href="css/style.css" />
<link rel="stylesheet" type="text/css" media="screen" href="css/screen-sidebar.css" />
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="css/style-ie.css" />
<![endif]-->
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="all" href="css/style-ie6.css" />
<![endif]-->
<link rel="stylesheet" type="text/css" media="print" href="css/print.css" />
</head>
<body>
<div id="fixed-layer">
<div id="fixed-wrapper">
<div id="sidebar">
<div id="top-links"><span><a href="https://github.com/stephan-tolksdorf/fparsec">FParsec @ GitHub</a> | <a href="https://github.com/stephan-tolksdorf/fparsec/issues">Report a bug</a> | <a href="mailto:fparsec [at] quanttec.com?subject=FParsec&body=Hi Stephan,%0A%0A[your feedback]">Feedback</a></span></div>
<div id="nav-tree">
<table class="nav n1">
<tbody class="nav-open n1">
<tr class="nav-entry n1 _1">
<td class="nav-number n1"></td>
<td class="nav-title n1"><a href="index.html">FParsec Documentation</a></td>
</tr>
<tr class="nav-subentries n1 _1">
<td class="nav-subentries-number n1"></td>
<td class="nav-subentries n1">
<table class="nav n2">
<tbody class="nav-before-open n2">
<tr class="nav-entry n2 _1">
<td class="nav-number n2"><a href="about/index.html"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="about/index.html">About FParsec</a></td>
</tr>
<tr class="nav-entry n2 _2">
<td class="nav-number n2"><a href="license.html"><span class="section-number">2</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="license.html">License</a></td>
</tr>
</tbody>
<tbody class="nav-open selected n2">
<tr class="nav-entry selected n2 _3">
<td class="nav-number selected n2"><a href="#"><span class="section-number">3</span><span class="nav-space"></span></a></td>
<td class="nav-title selected n2"><a href="#">Download and installation</a></td>
</tr>
<tr class="nav-subentries selected n2 _3">
<td class="nav-subentries-number selected n2"></td>
<td class="nav-subentries selected n2">
<table class="nav n3">
<tbody class="nav-before-open n3">
<tr class="nav-entry n3 _1">
<td class="nav-number n3"><a href="#nuget-packages"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="#nuget-packages">NuGet packages</a></td>
</tr>
<tr class="nav-entry n3 _2">
<td class="nav-number n3"><a href="#getting-the-source"><span class="section-number">2</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="#getting-the-source">Getting the source</a></td>
</tr>
<tr class="nav-entry n3 _3">
<td class="nav-number n3">
<a href="#fparsec-is-built-as-two-dlls"><span class="section-number">3</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n3"><a href="#fparsec-is-built-as-two-dlls">FParsec is built as two DLLs</a></td>
</tr>
<tr class="nav-entry n3 _4">
<td class="nav-number n3">
<a href="#building-fparsec-from-source"><span class="section-number">4</span><span class="nav-space"></span></a>
</td>
<td class="nav-title n3"><a href="#building-fparsec-from-source">Building FParsec from source</a></td>
</tr>
<tr class="nav-entry n3 _5">
<td class="nav-number n3"><a href="#low-trust-version"><span class="section-number">5</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="#low-trust-version">The Low‐Trust version of FParsec</a></td>
</tr>
<tr class="nav-entry n3 _6">
<td class="nav-number n3"><a href="#configuration-options"><span class="section-number">6</span><span class="nav-space"></span></a></td>
<td class="nav-title n3"><a href="#configuration-options">Configuration options</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
<tbody class="nav-after-open n2">
<tr class="nav-entry n2 _4">
<td class="nav-number n2"><a href="tutorial.html"><span class="section-number">4</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="tutorial.html">Tutorial</a></td>
</tr>
<tr class="nav-entry n2 _5">
<td class="nav-number n2"><a href="users-guide/index.html"><span class="section-number">5</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="users-guide/index.html">User’s Guide</a></td>
</tr>
<tr class="nav-entry n2 _6">
<td class="nav-number n2"><a href="reference/index.html"><span class="section-number">6</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="reference/index.html">Reference</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<div id="copyright">
<span>Copyright © 2022 <a href="about/contact.html">Stephan Tolksdorf</a></span>
</div>
</div>
</div>
</div>
<div id="wrapper">
<div id="main">
<div id="main-content">
<div id="breadcrumbs">
<span class="breadcrumbs">
<span id="breadcrumbs-parents"><a href="index.html">FParsec Documentation</a></span><span class="breadcrumbs-sep"> > </span>Download and installation
</span>
</div>
<div class="section s1">
<h1 class="title h1"><span><span class="section-number">3</span> Download and installation</span></h1>
<div class="intro i1">
<div class="para _1">
<p>FParsec is distributed in source code form and as NuGet packages.</p>
</div>
<div class="para _2">
<p>
If you’re new to FParsec, I’d recommend to start by downloading the <a
href="https://github.com/stephan-tolksdorf/fparsec/archive/master.zip">source code package</a> and experimenting a bit with the included sample
projects. With the project and solution files building the library and the samples is as easy as clicking a button.
</p>
</div>
<div class="para _3">
<p>The source package also includes a complete copy of the HTML documentation for offline viewing.</p>
</div>
<div class="para _4 lcinp">
<div class="local-toc">
<div class="toc-toc-title">
Contents
</div>
<table class="toc t1">
<tr class="toc-entry toc t1 _0">
<td class="toc-number toc t1"><a href="#nuget-packages"><span class="toc-number">1</span><span class="toc-space"></span></a></td>
<td class="toc-title toc t1"><a href="#nuget-packages">NuGet packages</a></td>
</tr>
<tr class="toc-entry toc t1 _1">
<td class="toc-number toc t1"><a href="#getting-the-source"><span class="toc-number">2</span><span class="toc-space"></span></a></td>
<td class="toc-title toc t1"><a href="#getting-the-source">Getting the source</a></td>
</tr>
<tr class="toc-entry toc t1 _2">
<td class="toc-number toc t1"><a href="#fparsec-is-built-as-two-dlls"><span class="toc-number">3</span><span class="toc-space"></span></a></td>
<td class="toc-title toc t1"><a href="#fparsec-is-built-as-two-dlls">FParsec is built as two DLLs</a></td>
</tr>
<tr class="toc-entry toc t1 _3">
<td class="toc-number toc t1"><a href="#building-fparsec-from-source"><span class="toc-number">4</span><span class="toc-space"></span></a></td>
<td class="toc-title toc t1"><a href="#building-fparsec-from-source">Building FParsec from source</a></td>
</tr>
<tr class="toc-entry toc t1 _4">
<td class="toc-number toc t1"><a href="#low-trust-version"><span class="toc-number">5</span><span class="toc-space"></span></a></td>
<td class="toc-title toc t1"><a href="#low-trust-version">The Low‐Trust version of FParsec</a></td>
</tr>
<tr class="toc-entry toc t1 _5">
<td class="toc-number toc t1"><a href="#configuration-options"><span class="toc-number">6</span><span class="toc-space"></span></a></td>
<td class="toc-title toc t1"><a href="#configuration-options">Configuration options</a></td>
</tr>
</table>
</div>
</div>
</div>
<div id="nuget-packages" class="section s2">
<h2 class="title h2"><span><span class="section-number">3.1</span> NuGet packages</span></h2>
<div class="intro i2">
<div class="para _1">
<p>There are two NuGet packages of FParsec, which are built with different configuration options.</p>
</div>
<div class="para _2">
<p>
The <a href="https://nuget.org/packages/FParsec">basic package</a> uses the <a href="#low-trust-version">Low‐Trust version</a> of FParsec, which
uses no <a href="https://msdn.microsoft.com/en-us/library/t2yzs44b.aspx">unverifiable code</a> and is optimized for maximum portability. The
main limitation of this version is that any input stream is completely read into a string before parsing, which limits the maximum practical
input size. This package also contains assemblies for .NET Standard 2.0.
</p>
</div>
<div class="para _3">
<p>
The <a href="https://nuget.org/packages/FParsec-Big-Data-Edition/">“Big Data edition” package</a> uses the non‐Low‐Trust version
of FParsec that is optimized for maximum performance and supports extremely large input streams. Since this configuration is also the default
configuration of the solution files included with the source code, it is sometimes referred to as the “normal” version of FParsec.
This version of FParsec does use “unsafe” (i.e. unverifiable) code involving unmanaged pointers. It also uses code generation in
the implementation of <code class="fsharp"><a href="reference/charparsers.html#members.isAnyOf"><span class="ci">isAnyOf</span></a></code>,
<code class="fsharp"><a href="reference/charparsers.html#members.isNoneOf"><span class="ci">isNoneOf</span></a></code>, <code class="fsharp"><a
href="reference/charparsers.html#members.anyOf"><span class="ci">anyOf</span></a></code>, <code class="fsharp"><a
href="reference/charparsers.html#members.skipAnyOf"><span class="ci">skipAnyOf</span></a></code>, <code class="fsharp"><a
href="reference/charparsers.html#members.noneOf"><span class="ci">noneOf</span></a></code> and <code class="fsharp"><a
href="reference/charparsers.html#members.skipNoneOf"><span class="ci">skipNoneOf</span></a></code>. <em>Unfortunately, this version is currently
not compatible with .NET Standard/.NET Core.</em>
</p>
</div>
<div class="para _4">
<p>
Should you measure a significant performance <span class="i">degradation</span> when switching to the Big Data edition, you’re probably
inadvertently recreating the same <code class="fsharp"><a href="reference/charparsers.html#members.isAnyOf"><span
class="ci">isAnyOf</span></a></code>‐ or <code class="fsharp"><a href="reference/charparsers.html#members.isNoneOf"><span
class="ci">isNoneOf</span></a></code>‐based parsers again and again, as explained <a
href="users-guide/performance-optimizations.html#performance-guidelines.construct-parsers-once">here</a> and <a
href="users-guide/where-is-the-monad.html#why-the-monadic-syntax-is-slow">here</a>.
</p>
</div>
<div class="para _5">
<p>
The .NET Framework assemblies in the NuGet packages are strongly signed. Their assembly version numbers will only be incremented for breaking
changes. The .NET Standard assembly in the <code class="fsharp"><span class="ci">FParsec</span></code> package is not signed.
</p>
</div>
<div class="para _6">
<p>The NuGet packages include PDBs and SourceLink support, which should allow you to step through FParsec code in the debugger of your IDE.</p>
</div>
</div>
</div>
<div id="getting-the-source" class="section s2">
<h2 class="title h2"><span><span class="section-number">3.2</span> Getting the source</span></h2>
<div class="intro i2">
<div class="para _1">
<p>
FParsec’s source code repository is hosted on GitHub at: <a
href="https://github.com/stephan-tolksdorf/fparsec">github.com/stephan‐tolksdorf/fparsec</a>
</p>
</div>
<div class="para _2">
<p>
You can clone the source code using Git or you can <a href="https://github.com/stephan-tolksdorf/fparsec/archive/master.zip">download it as a
zip‐file</a>.
</p>
</div>
<div class="para _3">
<p>
It’s an FParsec project policy to check only stable and tested code into the master branch of the GitHub repository, so you can normally just
work with the master version of FParsec.
</p>
</div>
<div class="para _4 lcinp">
<div class="admonition">
<div class="admonition-title">Tip</div>
<div class="admonition-body">
<div class="para _1">
<p><a href="https://git-fork.com/">Fork</a> is a great free GUI for Git for Windows and MacOS.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="fparsec-is-built-as-two-dlls" class="section s2">
<h2 class="title h2"><span><span class="section-number">3.3</span> FParsec is built as two DLLs</span></h2>
<div class="intro i2">
<div class="para _1">
<p>
FParsec’s source code is written in both C# and F#. Since neither the C# nor the F# compiler directly support the other language, the respective
components need to be built separately.
</p>
</div>
<div class="para _2">
<p>
Hence, FParsec is built as two DLLs. The C# bits are compiled into the <span class="tt">FParsecCS.dll</span> and the F# bits (which depend on
the C# bits) are compiled into <span class="tt">FParsec.dll</span>.
</p>
</div>
<div class="para _3">
<p><em>Projects that use FParsec thus have to reference both DLLs.</em></p>
</div>
<div class="para _4">
<p>
If you reference the DLLs in the <a href="https://msdn.microsoft.com/en-us/library/dd233175.aspx">F# Interactive</a> console, you need to
reference <code class="fsharp"><span class="ci">FParsecCS</span><span class="cm">.</span><span class="ci">dll</span></code> before you reference
<code class="fsharp"><span class="ci">FParsec</span><span class="cm">.</span><span class="ci">dll</span></code>.
</p>
</div>
<div class="para _5 lcinp">
<div class="admonition">
<div class="admonition-title">Note</div>
<div class="admonition-body">
<div class="para _1">
<p>
If you don’t want to distribute the FParsec DLLs together with the assembly of your project, you can use the <a
href="https://msdn.microsoft.com/en-us/library/dd233171.aspx"><span class="tt">staticlink</span> command‐line option</a> of the F# compiler
to merge the FParsec DLLs into your assembly.
</p>
</div>
<div class="para _2">
<p>
Unfortunately, the same option cannot be used to merge <span class="tt">FParsecCS.dll</span> into the <span class="tt">FParsec.dll</span>, as
the public definitions in <span class="tt">FParsecCS.dll</span> wouldn’t be reexported by <span class="tt">FParsec.dll</span>. For similar
reasons it also doesn’t seem to be possible to use tools like <a
href="http://research.microsoft.com/en-us/people/mbarnett/ILMerge.aspx">ILMerge</a> or <a
href="http://code.google.com/p/il-repack/">il‐repack</a> to obtain a merged <span class="tt">FParsec.dll</span> that can be properly consumed
by F# programs.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="building-fparsec-from-source" class="section s2">
<h2 class="title h2"><span><span class="section-number">3.4</span> Building FParsec from source</span></h2>
<div class="intro i2">
<div class="para _1">
<p>
The solution file <span class="tt">FParsec.sln</span> in the root source folder and the associated project files in the subfolders can be used
to build FParsec from the command line or with IDEs such as Visual Studio 2019 or JetBrains Rider.
</p>
</div>
<div class="para _2">
<p>
To build the Low‐Trust version of FParsec, you have to specifiy either <code class="fsharp"><span class="ci">Debug</span><span
class="co">-</span><span class="ci">LowTrust</span></code> or <code class="fsharp"><span class="ci">Release</span><span class="co">-</span><span
class="ci">LowTrust</span></code> as the configuration. The <code class="fsharp"><span class="ci">Debug</span></code> and <code
class="fsharp"><span class="ci">Release</span></code> configurations build the non‐Low‐Trust version of FParsec, which currently is not
compatible with the .NET Core runtime.
</p>
</div>
<div class="para _3 lcinp">
<div class="admonition">
<div class="admonition-title">Note</div>
<div class="admonition-body">
<div class="para _1">
<p>
In contrast to JetBrains Rider, Visual Studio 2019 currently does not support setting the supported target frameworks depending on the
configuration. Due to this issue one currently has to use the separate <code class="fsharp"><span class="ci">FParsec</span><span
class="co">-</span><span class="ci">LowTrust</span><span class="cm">.</span><span class="ci">sln</span></code> solution for building the
Low‐Trust version of FParsec in VS 2019.
</p>
</div>
</div>
</div>
</div>
<div class="para _4">
<p>The <span class="tt">Test</span> project in the solution files contains the unit tests for FParsec.</p>
</div>
<div class="para _5">
<p>
The file <a href="https://github.com/stephan-tolksdorf/fparsec/blob/master/.vscode/tasks.json"><span class="tt">.vscode/tasks.json</span></a>
contains some convenient task definitions for Visual Studio Code.
</p>
</div>
<div class="para _6">
<p>
The NuGet packages are built with the <a href="https://github.com/stephan-tolksdorf/fparsec/blob/master/pack.ps1"><span
class="tt">pack.ps1</span></a> PowerShell script.
</p>
</div>
</div>
</div>
<div id="low-trust-version" class="section s2">
<h2 class="title h2"><span><span class="section-number">3.5</span> The Low‐Trust version of FParsec</span></h2>
<div class="intro i2">
<div class="para _1">
<p>
For optimization reasons the normal implementation (the “Big Data edition”) of FParsec involves <a
href="https://msdn.microsoft.com/en-us/library/t2yzs44b.aspx">unverifiable code</a> using unmanaged pointers and runtime code generation.
</p>
</div>
<div class="para _2">
<p>
If you compile FParsec with the <code class="fsharp"><span class="ci">LOW_TRUST</span></code> conditional compiler symbol, the unverifiable code
is replaced with a “safe” alternative. This allows FParsec to be run in environments with “reduced trust”, such as
medium trust ASP.NET applications, and it also allows FParsec to be compiled against reduced subsets of the .NET API.
</p>
</div>
<div class="para _3">
<p>
In the <code class="fsharp"><span class="ci">Debug</span><span class="co">-</span><span class="ci">LowTrust</span></code> and <code
class="fsharp"><span class="ci">Release</span><span class="co">-</span><span class="ci">LowTrust</span></code> configurations of the <span
class="tt">FParsec.sln</span> solution file in the root source folder, <code class="fsharp"><span class="ci">LOW_TRUST</span></code> is
automatically defined as <code class="fsharp"><span class="cb">true</span></code>.
</p>
</div>
<div class="para _4 lcinp">
<p>The Low‐Trust version of FParsec has the following two major limitations:</p>
<ul class="l1">
<li class="_1">
A <code class="fsharp"><a href="reference/charstream.html#CharStream"><span class="ci">CharStream</span></a></code> that is constructed from a
<code class="fsharp"><a href="https://msdn.microsoft.com/en-us/library/system.io.stream.aspx"><span class="ci">System</span><span
class="cm">.</span><span class="ci">IO</span><span class="cm">.</span><span class="ci">Stream</span></a></code> or a file path reads the
complete file into a single string during construction. <em>This severely limits the maximum practical input stream size.</em>
</li>
<li class="_2">
The <code class="fsharp"><a href="reference/staticmapping.html"><span class="ci">StaticMapping</span></a></code> module is not supported.
</li>
</ul>
</div>
</div>
</div>
<div id="configuration-options" class="section s2">
<h2 class="title h2"><span><span class="section-number">3.6</span> Configuration options</span></h2>
<div class="intro i2">
<div class="para _1">
<p>
You can configure FParsec’s source code with a number of conditional compilation symbols (a.k.a. preprocessor defines). Besides the <a
href="#low-trust-version">Low‐Trust option</a>, these symbols mostly serve tuning purposes.
</p>
</div>
<div class="para _2 lcinp">
<div class="dl multi-para">
<div class="dl-title">Options for <span class="tt">FParsecCS.dll</span></div>
<dl class="dl multi-para">
<dt class="_1"><code class="fsharp"><span class="ci">LOW_TRUST</span></code></dt>
<dd class="_1">
<div class="para _1">
<p>See <a href="#low-trust-version">above</a>.</p>
</div>
</dd>
<dt class="_2">
<code class="fsharp"><span class="a" id="configuration-options.AGGRESSIVE_INLINING"><span class="ci">AGGRESSIVE_INLINING</span></span></code>
</dt>
<dd class="_2">
<div class="para _1">
<p>Requires a version of NET ≥ 4.5.</p>
</div>
<div class="para _2">
<p>
Annotates some functions with the <code class="fsharp"><a
href="https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions(v=vs.110).aspx"><span
class="ci">MethodImplOptions</span></a><span class="cm">.</span><span class="ci">AggressiveInlining</span></code> attribute.
</p>
</div>
</dd>
<dt class="_3"><code class="fsharp"><span class="ci">PCL</span></code></dt>
<dd class="_3">
<div class="para _1">
<p>Compile for a PCL subset of the .NET API.</p>
</div>
</dd>
<dt class="_4">
<code class="fsharp"><span class="a" id="configuration-options.SMALL_STATETAG"><span class="ci">SMALL_STATETAG</span></span></code>
</dt>
<dd class="_4">
<div class="para _1">
<p>
Use a 32‐bit <code class="fsharp"><a href="reference/charstream.html#CharStream.members.StateTag"><span
class="ci">StateTag</span></a></code> in the <code class="fsharp"><a href="reference/charstream.html#CharStream"><span
class="ci">CharStream</span></a></code> class instead of the default 64‐bit one.
</p>
</div>
<div class="para _2">
<p>
This is an optimization for 32‐bit runtimes. You can find more information about the state tag in <a
href="users-guide/applying-parsers-in-sequence.html#the-statetag">section 5.4.3</a> of the user’s guide.
</p>
</div>
</dd>
<dt class="_5">
<code class="fsharp"><span class="a" id="configuration-options.UNALIGNED_READS"><span class="ci">UNALIGNED_READS</span></span></code>
</dt>
<dd class="_5">
<div class="para _1">
<p>
<span class="small"><span class="i">This option does not affect the <a href="#low-trust-version">Low‐Trust version</a> of
FParsec.</span></span><br />
</p>
</div>
<div class="para _2">
<p>Optimize for CPUs that support fast unaligned memory reads, i.e. any modern x86‐based CPU.</p>
</div>
<div class="para _3">
<p>This option only makes a noticeable difference is some specific situations.</p>
</div>
</dd>
</dl>
</div>
</div>
<div class="para _3 lcinp">
<div class="dl multi-para">
<div class="dl-title">Options for <span class="tt">FParsec.dll</span></div>
<dl class="dl multi-para">
<dt class="_1"><code class="fsharp"><span class="ci">LOW_TRUST</span></code></dt>
<dd class="_1">
<div class="para _1">
<p>See <a href="#low-trust-version">above</a>.</p>
</div>
</dd>
<dt class="_2"><code class="fsharp"><span class="ci">UNALIGNED_READS</span></code></dt>
<dd class="_2">
<div class="para _1">
<p>See <a href="#configuration-options.UNALIGNED_READS">above</a>.</p>
</div>
</dd>
<dt class="_3"><code class="fsharp"><span class="ci">NOINLINE</span></code></dt>
<dd class="_3">
<div class="para _1">
<p>Do not force inlining of certain parser combinators.</p>
</div>
<div class="para _2">
<p>This option enables you to step through the respective combinators during debugging.</p>
</div>
</dd>
<dt class="_4">
<code class="fsharp"><span class="a" id="configuration-options.USE_STATIC_MAPPING_FOR_IS_ANY_OF"><span
class="ci">USE_STATIC_MAPPING_FOR_IS_ANY_OF</span></span></code>
</dt>
<dd class="_4">
<div class="para _1">
<p>
<span class="small"><span class="i">This option does not affect the <a href="#low-trust-version">Low‐Trust version</a> of
FParsec.</span></span><br />
</p>
</div>
<div class="para _2">
<p>
Use <code class="fsharp"><a href="reference/staticmapping.html"><span class="ci">StaticMapping</span></a><span class="cm">.</span><a
href="reference/staticmapping.html#members.createStaticCharIndicatorFunction"><span
class="ci">createStaticCharIndicatorFunction</span></a></code> for the implementation of <code class="fsharp"><a
href="reference/charparsers.html#members.isAnyOf"><span class="ci">isAnyOf</span></a></code>, <code class="fsharp"><a
href="reference/charparsers.html#members.isNoneOf"><span class="ci">isNoneOf</span></a></code>, <code class="fsharp"><a
href="reference/charparsers.html#members.anyOf"><span class="ci">anyOf</span></a></code>, <code class="fsharp"><a
href="reference/charparsers.html#members.skipAnyOf"><span class="ci">skipAnyOf</span></a></code>, <code class="fsharp"><a
href="reference/charparsers.html#members.noneOf"><span class="ci">noneOf</span></a></code> and <code class="fsharp"><a
href="reference/charparsers.html#members.skipNoneOf"><span class="ci">skipNoneOf</span></a></code> for generating optimized char predicate
functions using runtime code generation.
</p>
</div>
<div class="para _3">
<p>
Runtime code generation is a relatively expensive operation, so this optimization is primarily meant for parsers that are applied to large
(or lots of) input streams. Please see the remarks for the <code class="fsharp"><a href="reference/staticmapping.html"><span
class="ci">StaticMapping</span></a></code> module for more information.
</p>
</div>
<div class="para _4">
<p>
If you run into noticeable performance problems or memory leaks when enabling this option, you’re probably inadvertently recreating the same
<code class="fsharp"><a href="reference/charparsers.html#members.isAnyOf"><span class="ci">isAnyOf</span></a></code>‐ or <code
class="fsharp"><a href="reference/charparsers.html#members.isNoneOf"><span class="ci">isNoneOf</span></a></code>‐based parser again and
again, as explained <a href="users-guide/performance-optimizations.html#performance-guidelines.construct-parsers-once">here</a> and <a
href="users-guide/where-is-the-monad.html#why-the-monadic-syntax-is-slow">here</a>.
</p>
</div>
</dd>
<dt class="_5">
<code class="fsharp"><a href="reference/staticmapping.html#remarks.DEBUG_STATIC_MAPPING"><span
class="ci">DEBUG_STATIC_MAPPING</span></a></code>
</dt>
<dd class="_5">
<div class="para _1">
<p>
<span class="small"><span class="i">This option does not affect the <a href="#low-trust-version">Low‐Trust version</a> of
FParsec.</span></span><br />
</p>
</div>
<div class="para _2">
<p>
See <a href="reference/staticmapping.html#remarks.DEBUG_STATIC_MAPPING"><code class="fsharp"><span class="ci">StaticMapping</span></code>
documentation</a>.
</p>
</div>
</dd>
</dl>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
================================================
FILE: Doc/html/index.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>FParsec Documentation</title>
<link rel="stylesheet" type="text/css" media="all" href="css/style.css" />
<link rel="stylesheet" type="text/css" media="screen" href="css/screen-sidebar.css" />
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="css/style-ie.css" />
<![endif]-->
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="all" href="css/style-ie6.css" />
<![endif]-->
<link rel="stylesheet" type="text/css" media="print" href="css/print.css" />
</head>
<body>
<div id="fixed-layer">
<div id="fixed-wrapper">
<div id="sidebar">
<div id="top-links"><span><a href="https://github.com/stephan-tolksdorf/fparsec">FParsec @ GitHub</a> | <a href="https://github.com/stephan-tolksdorf/fparsec/issues">Report a bug</a> | <a href="mailto:fparsec [at] quanttec.com?subject=FParsec&body=Hi Stephan,%0A%0A[your feedback]">Feedback</a></span></div>
<div id="nav-tree">
<table class="nav n1">
<tbody class="nav-open selected n1">
<tr class="nav-entry selected n1 _1">
<td class="nav-number selected n1"></td>
<td class="nav-title selected n1"><a href="#">FParsec Documentation</a></td>
</tr>
<tr class="nav-subentries selected n1 _1">
<td class="nav-subentries-number selected n1"></td>
<td class="nav-subentries selected n1">
<table class="nav n2">
<tbody class="nav-before-open n2">
<tr class="nav-entry n2 _1">
<td class="nav-number n2"><a href="about/index.html"><span class="section-number">1</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="about/index.html">About FParsec</a></td>
</tr>
<tr class="nav-entry n2 _2">
<td class="nav-number n2"><a href="license.html"><span class="section-number">2</span><span class="nav-space"></span></a></td>
<td class="nav-title n2"><a href="license.html">License</a></td>
</tr>
<tr class="nav-entry n2 _3">
<td class="nav-number n2">
gitextract_d9t2bjvu/ ├── .gitattributes ├── .github/ │ └── workflows/ │ └── ci.yml ├── .gitignore ├── .vscode/ │ └── tasks.json ├── Build/ │ ├── FParsec.Common.targets │ ├── fparsec-license.txt │ └── fparsec.snk ├── Directory.Build.props ├── Doc/ │ ├── html/ │ │ ├── about/ │ │ │ ├── changelog.html │ │ │ ├── contact.html │ │ │ ├── fparsec-vs-alternatives.html │ │ │ ├── index.html │ │ │ └── status-and-roadmap.html │ │ ├── css/ │ │ │ ├── print.css │ │ │ ├── screen-sidebar.css │ │ │ ├── style-ie.css │ │ │ ├── style-ie6.css │ │ │ └── style.css │ │ ├── download-and-installation.html │ │ ├── index.html │ │ ├── license.html │ │ ├── reference/ │ │ │ ├── charparsers.html │ │ │ ├── charstream.html │ │ │ ├── error.html │ │ │ ├── errormessage.html │ │ │ ├── errormessagelist.html │ │ │ ├── index.html │ │ │ ├── operatorprecedenceparser.html │ │ │ ├── parser-overview.html │ │ │ ├── position.html │ │ │ ├── primitives.html │ │ │ ├── reply.html │ │ │ ├── staticmapping.html │ │ │ └── text.html │ │ ├── tutorial.html │ │ └── users-guide/ │ │ ├── applying-parsers-in-sequence.html │ │ ├── customizing-error-messages.html │ │ ├── debugging-a-parser.html │ │ ├── index.html │ │ ├── internals-of-a-simple-parser-function.html │ │ ├── looking-ahead-and-backtracking.html │ │ ├── parser-functions.html │ │ ├── parsing-alternatives.html │ │ ├── parsing-sequences.html │ │ ├── parsing-with-user-state.html │ │ ├── performance-optimizations.html │ │ ├── running-parsers-on-input.html │ │ ├── tips-and-tricks.html │ │ └── where-is-the-monad.html │ ├── misc/ │ │ └── removed-many-variants.fs │ └── src/ │ ├── changelog.txt │ ├── contact.txt │ ├── documentation.txt │ ├── download-and-installation.txt │ ├── fparsec-vs-alternatives.txt │ ├── license.txt │ ├── reference-charparsers.txt │ ├── reference-charstream.txt │ ├── reference-error.txt │ ├── reference-errormessage.txt │ ├── reference-errormessagelist.txt │ ├── reference-operatorprecedenceparser.txt │ ├── reference-overview.txt │ ├── reference-position.txt │ ├── reference-primitives.txt │ ├── reference-reply.txt │ ├── reference-staticmapping.txt │ ├── reference-text.txt │ ├── reference.txt │ ├── status-and-roadmap.txt │ ├── template.html │ ├── tutorial.txt │ └── users-guide.txt ├── FParsec/ │ ├── AssemblyInfo.fs │ ├── CharParsers.fs │ ├── CharParsers.fsi │ ├── Emit.fs │ ├── Error.fs │ ├── Error.fsi │ ├── FParsec-LowTrust.fsproj │ ├── FParsec.fsproj │ ├── FParsec.targets │ ├── Internals.fs │ ├── Primitives.fs │ ├── Primitives.fsi │ ├── Range.fs │ ├── StaticMapping.fs │ └── StaticMapping.fsi ├── FParsec-LowTrust.sln ├── FParsec.sln ├── FParsecCS/ │ ├── Buffer.cs │ ├── CaseFoldTable.cs │ ├── CharSet.cs │ ├── CharStream.cs │ ├── CharStreamLT.cs │ ├── Cloning.cs │ ├── ErrorMessage.cs │ ├── ErrorMessageList.cs │ ├── Errors.cs │ ├── FParsecCS-LowTrust.csproj │ ├── FParsecCS.csproj │ ├── FParsecCS.targets │ ├── FastGenericEqualityERComparer.cs │ ├── HexFloat.cs │ ├── IdentifierValidator.cs │ ├── ManyChars.cs │ ├── OperatorPrecedenceParser.cs │ ├── Position.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── Reply.cs │ ├── StringBuffer.cs │ ├── Strings.cs │ └── Text.cs ├── NuGet.config ├── Samples/ │ ├── Calculator/ │ │ ├── Calculator-LowTrust.fsproj │ │ ├── Calculator.fsproj │ │ ├── Calculator.targets │ │ ├── InterpLexYacc-LowTrust.fsproj │ │ └── calculator.fs │ ├── FSharpParsingSample/ │ │ ├── FParsecVersion/ │ │ │ ├── InterpFParsec-LowTrust.fsproj │ │ │ ├── InterpFParsec.fsproj │ │ │ ├── InterpFParsec.targets │ │ │ ├── main.fs │ │ │ └── parser.fs │ │ ├── LexYaccVersion/ │ │ │ ├── Doc.html │ │ │ ├── InterpLexYacc.fsproj │ │ │ ├── ast.fs │ │ │ ├── interp.fs │ │ │ ├── lex.fs │ │ │ ├── lex.fsl │ │ │ ├── main.fs │ │ │ ├── pars.fs │ │ │ ├── pars.fsi │ │ │ ├── pars.fsy │ │ │ └── test.lang │ │ └── readme.txt │ ├── JSON/ │ │ ├── JsonParser-LowTrust.fsproj │ │ ├── JsonParser.fsproj │ │ ├── JsonParser.targets │ │ ├── PegParser-LowTrust.fsproj │ │ ├── ast.fs │ │ ├── main.fs │ │ ├── parser.fs │ │ └── test_json.txt │ ├── PEG/ │ │ ├── PegParser-LowTrust.fsproj │ │ ├── PegParser.fsproj │ │ ├── PegParser.targets │ │ ├── ast.fs │ │ ├── main.fs │ │ ├── parser.fs │ │ └── test_peg.txt │ └── Tutorial/ │ ├── Tutorial-LowTrust.fsproj │ ├── Tutorial.fsproj │ ├── Tutorial.targets │ └── tutorial.fs ├── Test/ │ ├── AllTests.fs │ ├── BufferTests.fs │ ├── CharParsersTests.fs │ ├── CharSetTests.fs │ ├── CharStreamTests.fs │ ├── CloningTests.fs │ ├── HexFloatTests.fs │ ├── IdentifierValidatorTests.fs │ ├── OperatorPrecedenceParserTests.fs │ ├── PrimitivesTests.fs │ ├── RangeTests.fs │ ├── StaticMappingTests.fs │ ├── StringBufferTests.fs │ ├── Test-LowTrust.fsproj │ ├── Test.fs │ ├── Test.fsproj │ ├── Test.targets │ └── TextTests.fs ├── global.json ├── pack.ps1 └── readme.md
SYMBOL INDEX (532 symbols across 20 files)
FILE: FParsecCS/Buffer.cs
class Buffer (line 12) | public static class Buffer {
method PositiveDistance (line 18) | internal static unsafe uint PositiveDistance(char* begin, char* end) {
method PositiveDistance64 (line 24) | internal static unsafe long PositiveDistance64(char* begin, char* end) {
method Copy (line 29) | static internal unsafe void Copy(byte* dst, byte* src, int size) {
method SwapByteOrder (line 37) | internal static uint SwapByteOrder(uint value) => BinaryPrimitives.Rev...
method SwapByteOrder (line 39) | internal static ulong SwapByteOrder(ulong value) => BinaryPrimitives.R...
method SwapByteOrder (line 41) | internal static void SwapByteOrder(Span<uint> array) {
method CopyUIntsStoredInLittleEndianByteArray (line 48) | internal static uint[] CopyUIntsStoredInLittleEndianByteArray(ReadOnly...
method Equals (line 59) | public static unsafe bool Equals(uint* ptr1, uint* ptr2, int length) =>
method LoadLittleEndianUInt32Data (line 62) | internal static unsafe uint* LoadLittleEndianUInt32Data(byte* data, in...
FILE: FParsecCS/CaseFoldTable.cs
class CaseFoldTable (line 10) | internal static class CaseFoldTable {
method CreateFoldedCharsArray (line 14) | private static char[] CreateFoldedCharsArray() {
method Initialize (line 26) | private static unsafe char* Initialize() {
FILE: FParsecCS/CharSet.cs
class CharSet (line 12) | internal sealed class CharSet {
method CharSet (line 23) | public CharSet(string chars) : this(chars, 32) {}
method CharSet (line 26) | public CharSet(string chars, int maxTableSize) {
FILE: FParsecCS/CharStream.cs
type CharStreamIndexToken (line 24) | public unsafe struct CharStreamIndexToken {
method CharStreamIndexToken (line 34) | internal CharStreamIndexToken(
method ThrowInvalidIndexToken (line 48) | private static void ThrowInvalidIndexToken() {
method GetIndex (line 52) | public long GetIndex(CharStream charStreamFromWhichIndexTokenWasRetrie...
type TwoChars (line 62) | public struct TwoChars : IEquatable<TwoChars> {
method TwoChars (line 65) | internal TwoChars(uint chars) {
method TwoChars (line 68) | public TwoChars(char char0, char char1) {
method Equals (line 75) | public override bool Equals(object obj) { return (obj is TwoChars) && ...
method Equals (line 76) | public bool Equals(TwoChars other) { return Chars == other.Chars; }
method GetHashCode (line 77) | public override int GetHashCode() { return unchecked((int)Chars); }
class BlockInfo (line 107) | private class BlockInfo {
method BlockInfo (line 134) | public BlockInfo(long byteIndex, int byteBufferIndex,
method SetLine_WithoutCheckAndWithoutIncrementingTheStateTag (line 192) | public void SetLine_WithoutCheckAndWithoutIncrementingTheStateTag(long l...
method SetLineBegin_WithoutCheckAndWithoutIncrementingTheStateTag (line 199) | public void SetLineBegin_WithoutCheckAndWithoutIncrementingTheStateTag(l...
class MultiBlockData (line 256) | private partial class MultiBlockData {
method GetIndex (line 335) | internal long GetIndex(char* ptr, int block) {
method CharStream (line 364) | internal CharStream(string chars) {
method CharStream (line 373) | public CharStream(string chars, int index, int length) : this(chars, ind...
method CharStream (line 374) | public CharStream(string chars, int index, int length, long streamIndexO...
method CharStream (line 390) | public CharStream(char[] chars, int index, int length) : this(chars, ind...
method CharStream (line 391) | public CharStream(char[] chars, int index, int length, long streamIndexO...
method CharStream (line 412) | public CharStream(char* chars, int length) : this(chars, length, 0) {}
method CharStream (line 413) | public CharStream(char* chars, int length, long streamIndexOffset) {
method CharConstructorContinue (line 425) | private void CharConstructorContinue(char* bufferBegin, int length) {
method CharStream (line 440) | internal CharStream(string chars, char* pChars, char* begin, int length) {
method CharStream (line 459) | public CharStream(string path, Encoding encoding)
method CharStream (line 463) | public CharStream(string path, Encoding encoding, bool detectEncodingFro...
method CharStream (line 467) | public CharStream(string path, Encoding encoding, bool detectEncodingFro...
method CharStream (line 482) | public CharStream(Stream stream, Encoding encoding)
method CharStream (line 487) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding)
method CharStream (line 492) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding, bool...
method CharStream (line 497) | public CharStream(Stream stream, bool leaveOpen,
method StreamConstructorContinue (line 511) | private void StreamConstructorContinue(Stream stream, bool leaveOpen,
method Dispose (line 636) | public void Dispose() {
method ParseString (line 656) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability"...
method FillByteBuffer (line 688) | private int FillByteBuffer() {
method ClearAndRefillByteBuffer (line 697) | private int ClearAndRefillByteBuffer(int byteBufferIndex) {
method ReadCharsFromStream (line 730) | private char* ReadCharsFromStream(char* buffer, int maxCount, out string...
FILE: FParsecCS/CharStreamLT.cs
type CharStreamIndexToken (line 18) | public struct CharStreamIndexToken {
method CharStreamIndexToken (line 27) | internal CharStreamIndexToken(
method ThrowInvalidIndexToken (line 39) | private static void ThrowInvalidIndexToken() {
method GetIndex (line 43) | public long GetIndex(CharStream charStreamFromWhichIndexTokenWasRetrie...
type TwoChars (line 53) | public struct TwoChars : IEquatable<TwoChars> {
method TwoChars (line 56) | internal TwoChars(uint chars) {
method TwoChars (line 59) | public TwoChars(char char0, char char1) {
method Equals (line 66) | public override bool Equals(object obj) { return (obj is TwoChars) && ...
method Equals (line 67) | public bool Equals(TwoChars other) { return Chars == other.Chars; }
method GetHashCode (line 68) | public override int GetHashCode() { return unchecked((int)Chars); }
class CharStream (line 74) | public class CharStream : IDisposable {
method GetIndex (line 122) | internal long GetIndex(int idx) {
method SetLine_WithoutCheckAndWithoutIncrementingTheStateTag (line 144) | public void SetLine_WithoutCheckAndWithoutIncrementingTheStateTag(long...
method SetLineBegin_WithoutCheckAndWithoutIncrementingTheStateTag (line 150) | public void SetLineBegin_WithoutCheckAndWithoutIncrementingTheStateTag...
method CharStream (line 171) | internal CharStream(string chars) {
method CharStream (line 186) | public CharStream(string chars, int index, int length) : this(chars, i...
method CharStream (line 188) | public CharStream(string chars, int index, int length, long streamBegi...
method CharStream (line 204) | public CharStream(string path, Encoding encoding)
method CharStream (line 207) | public CharStream(string path, Encoding encoding, bool detectEncodingF...
method CharStream (line 210) | public CharStream(string path, Encoding encoding, bool detectEncodingF...
method CharStream (line 223) | public CharStream(Stream stream, Encoding encoding)
method CharStream (line 226) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding)
method CharStream (line 229) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding, bo...
method CharStream (line 232) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding, bo...
method StreamConstructorContinue (line 239) | private void StreamConstructorContinue(Stream stream, bool leaveOpen, ...
method Dispose (line 319) | public void Dispose() {}
method ParseString (line 321) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliabilit...
method Seek (line 333) | public void Seek(long index) {
method ThrowInvalidIndexToken (line 356) | private static void ThrowInvalidIndexToken() {
method Seek (line 360) | public void Seek(CharStreamIndexToken indexToken) {
method ReadFrom (line 371) | public string ReadFrom(CharStreamIndexToken indexToken) {
method ReadFrom (line 380) | internal string ReadFrom(int idx0) {
method RegisterNewline (line 394) | public void RegisterNewline() {
method RegisterNewLineBegin (line 402) | private void RegisterNewLineBegin(int stringLineBegin, int lineOffset) {
method RegisterNewlines (line 413) | public void RegisterNewlines(int lineOffset, int newColumnMinus1) {
method RegisterNewlines (line 422) | public void RegisterNewlines(long lineOffset, long newColumnMinus1) {
method Peek (line 432) | public char Peek() {
method Skip (line 438) | public void Skip() {
method Read (line 449) | public char Read() {
method SkipAndPeek (line 462) | public char SkipAndPeek() {
method Peek2 (line 475) | public TwoChars Peek2() {
method Peek (line 485) | public char Peek(uint utf16Offset) {
method Skip (line 495) | public void Skip(uint utf16Offset) {
method SkipAndPeek (line 509) | public char SkipAndPeek(uint utf16Offset) {
method Peek (line 523) | public char Peek(int utf16Offset) {
method Skip (line 540) | public void Skip(int utf16Offset) {
method Skip (line 562) | public void Skip(long utf16Offset) {
method SkipAndPeek (line 572) | public char SkipAndPeek(int utf16Offset) {
method PeekString (line 595) | public string PeekString(int length) {
method Read (line 604) | public string Read(int length) {
method PeekString (line 618) | public int PeekString(char[] buffer, int bufferIndex, int length) {
method Read (line 621) | public int Read(char[] buffer, int bufferIndex, int length) {
method Read (line 624) | private int Read(char[] buffer, int bufferIndex, int length, bool back...
method Match (line 651) | public bool Match(char ch) {
method MatchCaseFolded (line 655) | public bool MatchCaseFolded(char caseFoldedChar) {
method Skip (line 659) | public bool Skip(char ch) {
method SkipCaseFolded (line 671) | public bool SkipCaseFolded(char caseFoldedChar) {
method Skip (line 683) | public bool Skip(TwoChars twoChars) {
method Match (line 699) | public bool Match(string chars) {
method Skip (line 710) | public bool Skip(string chars) {
method MatchCaseFolded (line 725) | public bool MatchCaseFolded(string caseFoldedChars) {
method SkipCaseFolded (line 736) | public bool SkipCaseFolded(string caseFoldedChars) {
method Match (line 751) | public bool Match(char[] chars, int charsIndex, int length) {
method Skip (line 754) | public bool Skip(char[] chars, int charsIndex, int length) {
method Skip (line 757) | private bool Skip(char[] chars, int charsIndex, int length, bool backt...
method Match (line 779) | public Match Match(Regex regex) {
method SkipWhitespace (line 784) | public bool SkipWhitespace() {
method SkipUnicodeWhitespace (line 852) | public bool SkipUnicodeWhitespace() {
method SkipNewline (line 907) | public bool SkipNewline() {
method SkipUnicodeNewline (line 924) | public bool SkipUnicodeNewline() {
method SkipNewlineThenWhitespace (line 943) | public int SkipNewlineThenWhitespace(int powerOf2TabStopDistance, bool...
method SkipRestOfLine (line 1005) | public void SkipRestOfLine(bool skipNewline) {
method ReadRestOfLine (line 1040) | public string ReadRestOfLine(bool skipNewline) {
method ReadCharOrNewline (line 1082) | public char ReadCharOrNewline() {
method SkipCharsOrNewlines (line 1103) | public int SkipCharsOrNewlines(int maxCharsOrNewlines) {
method ReadCharsOrNewlines (line 1140) | public string ReadCharsOrNewlines(int maxCharsOrNewlines, bool normali...
method SkipCharsOrNewlinesWhile (line 1186) | public int SkipCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFunc<c...
method SkipCharsOrNewlinesWhile (line 1189) | public int SkipCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFunc<c...
method ReadCharsOrNewlinesWhile (line 1252) | public string ReadCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFun...
method ReadCharsOrNewlinesWhile (line 1255) | public string ReadCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFun...
method SkipCharsOrNewlinesWhile (line 1328) | public int SkipCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFunc<c...
method SkipCharsOrNewlinesWhile (line 1331) | public int SkipCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFunc<c...
method ReadCharsOrNewlinesWhile (line 1401) | public string ReadCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFun...
method ReadCharsOrNewlinesWhile (line 1404) | public string ReadCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFun...
method RestOfStringEquals (line 1484) | private static bool RestOfStringEquals(string str1, int str1Index, str...
method RestOfStringEqualsCI (line 1493) | private static bool RestOfStringEqualsCI(string str1, int str1Index, s...
method SkipCharsOrNewlinesUntilString (line 1503) | public int SkipCharsOrNewlinesUntilString(string str, int maxCharsOrNe...
method SkipCharsOrNewlinesUntilString (line 1561) | public int SkipCharsOrNewlinesUntilString(string str, int maxCharsOrNe...
method SkipCharsOrNewlinesUntilCaseFoldedString (line 1640) | public int SkipCharsOrNewlinesUntilCaseFoldedString(string caseFoldedS...
method SkipCharsOrNewlinesUntilCaseFoldedString (line 1698) | public int SkipCharsOrNewlinesUntilCaseFoldedString(string caseFoldedS...
method CharStream (line 1843) | internal CharStream(string chars) : base(chars) {}
method CharStream (line 1845) | public CharStream(string chars, int index, int length) : base(chars, i...
method CharStream (line 1847) | public CharStream(string chars, int index, int length, long streamBegi...
method CharStream (line 1850) | public CharStream(string path, Encoding encoding) : base(path, encodin...
method CharStream (line 1852) | public CharStream(string path, Encoding encoding, bool detectEncodingF...
method CharStream (line 1855) | public CharStream(string path, Encoding encoding, bool detectEncodingF...
method CharStream (line 1858) | public CharStream(Stream stream, Encoding encoding) : base(stream, enc...
method CharStream (line 1860) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding)
method CharStream (line 1863) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding, bo...
method CharStream (line 1866) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding, bo...
method ThrowInvalidState (line 1881) | private static void ThrowInvalidState() {
method BacktrackTo (line 1885) | public void BacktrackTo(CharStreamState<TUserState> state) {
method BacktrackTo (line 1888) | public void BacktrackTo(ref CharStreamState<TUserState> state) {
method ReadFrom (line 1902) | public string ReadFrom(CharStreamState<TUserState> stateWhereStringBeg...
method ReadFrom (line 1905) | public string ReadFrom(ref CharStreamState<TUserState> state, bool nor...
method CreateSubstream (line 1915) | public CharStream<TSubStreamUserState> CreateSubstream<TSubStreamUserS...
method CreateSubstream (line 1918) | public CharStream<TSubStreamUserState> CreateSubstream<TSubStreamUserS...
type CharStreamState (line 1780) | public struct CharStreamState<TUserState> {
method CharStreamState (line 1796) | public CharStreamState(CharStream<TUserState> charStream) {
method ThrowInvalidState (line 1808) | private static void ThrowInvalidState() {
method GetIndex (line 1822) | public long GetIndex(CharStream charStreamFromWhichStateWasRetrieved) {
method GetPosition (line 1830) | public Position GetPosition(CharStream charStreamFromWhichStateWasRetr...
class CharStream (line 1842) | public sealed class CharStream<TUserState> : CharStream {
method GetIndex (line 122) | internal long GetIndex(int idx) {
method SetLine_WithoutCheckAndWithoutIncrementingTheStateTag (line 144) | public void SetLine_WithoutCheckAndWithoutIncrementingTheStateTag(long...
method SetLineBegin_WithoutCheckAndWithoutIncrementingTheStateTag (line 150) | public void SetLineBegin_WithoutCheckAndWithoutIncrementingTheStateTag...
method CharStream (line 171) | internal CharStream(string chars) {
method CharStream (line 186) | public CharStream(string chars, int index, int length) : this(chars, i...
method CharStream (line 188) | public CharStream(string chars, int index, int length, long streamBegi...
method CharStream (line 204) | public CharStream(string path, Encoding encoding)
method CharStream (line 207) | public CharStream(string path, Encoding encoding, bool detectEncodingF...
method CharStream (line 210) | public CharStream(string path, Encoding encoding, bool detectEncodingF...
method CharStream (line 223) | public CharStream(Stream stream, Encoding encoding)
method CharStream (line 226) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding)
method CharStream (line 229) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding, bo...
method CharStream (line 232) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding, bo...
method StreamConstructorContinue (line 239) | private void StreamConstructorContinue(Stream stream, bool leaveOpen, ...
method Dispose (line 319) | public void Dispose() {}
method ParseString (line 321) | [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliabilit...
method Seek (line 333) | public void Seek(long index) {
method ThrowInvalidIndexToken (line 356) | private static void ThrowInvalidIndexToken() {
method Seek (line 360) | public void Seek(CharStreamIndexToken indexToken) {
method ReadFrom (line 371) | public string ReadFrom(CharStreamIndexToken indexToken) {
method ReadFrom (line 380) | internal string ReadFrom(int idx0) {
method RegisterNewline (line 394) | public void RegisterNewline() {
method RegisterNewLineBegin (line 402) | private void RegisterNewLineBegin(int stringLineBegin, int lineOffset) {
method RegisterNewlines (line 413) | public void RegisterNewlines(int lineOffset, int newColumnMinus1) {
method RegisterNewlines (line 422) | public void RegisterNewlines(long lineOffset, long newColumnMinus1) {
method Peek (line 432) | public char Peek() {
method Skip (line 438) | public void Skip() {
method Read (line 449) | public char Read() {
method SkipAndPeek (line 462) | public char SkipAndPeek() {
method Peek2 (line 475) | public TwoChars Peek2() {
method Peek (line 485) | public char Peek(uint utf16Offset) {
method Skip (line 495) | public void Skip(uint utf16Offset) {
method SkipAndPeek (line 509) | public char SkipAndPeek(uint utf16Offset) {
method Peek (line 523) | public char Peek(int utf16Offset) {
method Skip (line 540) | public void Skip(int utf16Offset) {
method Skip (line 562) | public void Skip(long utf16Offset) {
method SkipAndPeek (line 572) | public char SkipAndPeek(int utf16Offset) {
method PeekString (line 595) | public string PeekString(int length) {
method Read (line 604) | public string Read(int length) {
method PeekString (line 618) | public int PeekString(char[] buffer, int bufferIndex, int length) {
method Read (line 621) | public int Read(char[] buffer, int bufferIndex, int length) {
method Read (line 624) | private int Read(char[] buffer, int bufferIndex, int length, bool back...
method Match (line 651) | public bool Match(char ch) {
method MatchCaseFolded (line 655) | public bool MatchCaseFolded(char caseFoldedChar) {
method Skip (line 659) | public bool Skip(char ch) {
method SkipCaseFolded (line 671) | public bool SkipCaseFolded(char caseFoldedChar) {
method Skip (line 683) | public bool Skip(TwoChars twoChars) {
method Match (line 699) | public bool Match(string chars) {
method Skip (line 710) | public bool Skip(string chars) {
method MatchCaseFolded (line 725) | public bool MatchCaseFolded(string caseFoldedChars) {
method SkipCaseFolded (line 736) | public bool SkipCaseFolded(string caseFoldedChars) {
method Match (line 751) | public bool Match(char[] chars, int charsIndex, int length) {
method Skip (line 754) | public bool Skip(char[] chars, int charsIndex, int length) {
method Skip (line 757) | private bool Skip(char[] chars, int charsIndex, int length, bool backt...
method Match (line 779) | public Match Match(Regex regex) {
method SkipWhitespace (line 784) | public bool SkipWhitespace() {
method SkipUnicodeWhitespace (line 852) | public bool SkipUnicodeWhitespace() {
method SkipNewline (line 907) | public bool SkipNewline() {
method SkipUnicodeNewline (line 924) | public bool SkipUnicodeNewline() {
method SkipNewlineThenWhitespace (line 943) | public int SkipNewlineThenWhitespace(int powerOf2TabStopDistance, bool...
method SkipRestOfLine (line 1005) | public void SkipRestOfLine(bool skipNewline) {
method ReadRestOfLine (line 1040) | public string ReadRestOfLine(bool skipNewline) {
method ReadCharOrNewline (line 1082) | public char ReadCharOrNewline() {
method SkipCharsOrNewlines (line 1103) | public int SkipCharsOrNewlines(int maxCharsOrNewlines) {
method ReadCharsOrNewlines (line 1140) | public string ReadCharsOrNewlines(int maxCharsOrNewlines, bool normali...
method SkipCharsOrNewlinesWhile (line 1186) | public int SkipCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFunc<c...
method SkipCharsOrNewlinesWhile (line 1189) | public int SkipCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFunc<c...
method ReadCharsOrNewlinesWhile (line 1252) | public string ReadCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFun...
method ReadCharsOrNewlinesWhile (line 1255) | public string ReadCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFun...
method SkipCharsOrNewlinesWhile (line 1328) | public int SkipCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFunc<c...
method SkipCharsOrNewlinesWhile (line 1331) | public int SkipCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFunc<c...
method ReadCharsOrNewlinesWhile (line 1401) | public string ReadCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFun...
method ReadCharsOrNewlinesWhile (line 1404) | public string ReadCharsOrNewlinesWhile(Microsoft.FSharp.Core.FSharpFun...
method RestOfStringEquals (line 1484) | private static bool RestOfStringEquals(string str1, int str1Index, str...
method RestOfStringEqualsCI (line 1493) | private static bool RestOfStringEqualsCI(string str1, int str1Index, s...
method SkipCharsOrNewlinesUntilString (line 1503) | public int SkipCharsOrNewlinesUntilString(string str, int maxCharsOrNe...
method SkipCharsOrNewlinesUntilString (line 1561) | public int SkipCharsOrNewlinesUntilString(string str, int maxCharsOrNe...
method SkipCharsOrNewlinesUntilCaseFoldedString (line 1640) | public int SkipCharsOrNewlinesUntilCaseFoldedString(string caseFoldedS...
method SkipCharsOrNewlinesUntilCaseFoldedString (line 1698) | public int SkipCharsOrNewlinesUntilCaseFoldedString(string caseFoldedS...
method CharStream (line 1843) | internal CharStream(string chars) : base(chars) {}
method CharStream (line 1845) | public CharStream(string chars, int index, int length) : base(chars, i...
method CharStream (line 1847) | public CharStream(string chars, int index, int length, long streamBegi...
method CharStream (line 1850) | public CharStream(string path, Encoding encoding) : base(path, encodin...
method CharStream (line 1852) | public CharStream(string path, Encoding encoding, bool detectEncodingF...
method CharStream (line 1855) | public CharStream(string path, Encoding encoding, bool detectEncodingF...
method CharStream (line 1858) | public CharStream(Stream stream, Encoding encoding) : base(stream, enc...
method CharStream (line 1860) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding)
method CharStream (line 1863) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding, bo...
method CharStream (line 1866) | public CharStream(Stream stream, bool leaveOpen, Encoding encoding, bo...
method ThrowInvalidState (line 1881) | private static void ThrowInvalidState() {
method BacktrackTo (line 1885) | public void BacktrackTo(CharStreamState<TUserState> state) {
method BacktrackTo (line 1888) | public void BacktrackTo(ref CharStreamState<TUserState> state) {
method ReadFrom (line 1902) | public string ReadFrom(CharStreamState<TUserState> stateWhereStringBeg...
method ReadFrom (line 1905) | public string ReadFrom(ref CharStreamState<TUserState> state, bool nor...
method CreateSubstream (line 1915) | public CharStream<TSubStreamUserState> CreateSubstream<TSubStreamUserS...
method CreateSubstream (line 1918) | public CharStream<TSubStreamUserState> CreateSubstream<TSubStreamUserS...
FILE: FParsecCS/Cloning.cs
class CloneImage (line 104) | public abstract class CloneImage {
method CreateClone (line 106) | public abstract object CreateClone();
method CloneImage (line 108) | internal CloneImage() {}
class Cloner (line 111) | public abstract class Cloner {
method Create (line 117) | public static Cloner Create(Type type) {
method Clone (line 123) | public object Clone(object instance) {
method CaptureImage (line 129) | public CloneImage CaptureImage(object instance) {
method Cloner (line 137) | private Cloner(Type type, CloneEventHandlers eventHandlers) { Type = t...
method CaptureShallowStateAndEnqueueNestedState (line 139) | internal abstract State CaptureShallowStateAndEnqueueNestedState(objec...
class CaptureContext (line 141) | internal sealed class CaptureContext {
method CaptureContext (line 144) | public CaptureContext(bool stateIsReturnedToUser) {
method GetObjectIndex (line 149) | public int GetObjectIndex(object instance, Cloner cloner) {
class State (line 164) | internal abstract class State {
method CreateUninitializedObject (line 175) | public abstract object CreateUninitializedObject();
method WriteToUninitializedObject (line 176) | public abstract void WriteToUninitializedObject(object instance, obj...
method State (line 178) | public State(CloneEventHandlers eventHandlers, int[] objectIndices) {
method State (line 183) | private State() {}
class DummyState (line 185) | private sealed class DummyState : State {
method CreateUninitializedObject (line 190) | public override object CreateUninitializedObject() {
method WriteToUninitializedObject (line 194) | public override void WriteToUninitializedObject(object instance, o...
method CreateMemberwiseCloneDelegate (line 204) | private static Func<object, object> CreateMemberwiseCloneDelegate() {
method CreateWithoutLock (line 219) | private static Cloner CreateWithoutLock(Type type) {
class PhyiscalEqualityObjectComparer (line 259) | private sealed class PhyiscalEqualityObjectComparer : System.Collectio...
method Equals (line 260) | public override bool Equals(object x, object y) { return x == y; }
method GetHashCode (line 261) | public override int GetHashCode(object obj) {
type WorkItem (line 272) | private struct WorkItem {
method WorkItem (line 276) | public WorkItem(Cloner cloner, object instance) {
type OnSerializedListItem (line 282) | private struct OnSerializedListItem {
method OnSerializedListItem (line 286) | public OnSerializedListItem(CloneEventHandlers cloneEventHandlers, o...
method Contains (line 292) | private static bool Contains(int[] arrayOrNull, int element) {
method CaptureImage (line 300) | private CloneImage CaptureImage(object instance, bool imageIsReturnedT...
class BlittableCloner (line 393) | private sealed class BlittableCloner : Cloner {
method BlittableCloner (line 396) | public BlittableCloner(Type type, CloneEventHandlers eventHandlers, ...
method CaptureShallowStateAndEnqueueNestedState (line 401) | internal override State CaptureShallowStateAndEnqueueNestedState(obj...
class BlittableState (line 411) | private sealed class BlittableState : State {
method BlittableState (line 414) | public BlittableState(CloneEventHandlers eventHandlers, object value...
method CreateUninitializedObject (line 420) | public override object CreateUninitializedObject() {
method WriteToUninitializedObject (line 424) | public override void WriteToUninitializedObject(object instance, obj...
class Rank1ArrayCloner (line 427) | private sealed class Rank1ArrayCloner : Cloner {
method Rank1ArrayCloner (line 430) | public Rank1ArrayCloner(Type type, Cloner elementCloner) : base(type...
method CaptureShallowStateAndEnqueueNestedState (line 434) | internal override State CaptureShallowStateAndEnqueueNestedState(obj...
class Rank1ArrayState (line 460) | private sealed class Rank1ArrayState : State {
method Rank1ArrayState (line 464) | public Rank1ArrayState(Type elementType, int lowerBound, int[] objec...
method CreateUninitializedObject (line 472) | public override object CreateUninitializedObject() {
method WriteToUninitializedObject (line 479) | public override void WriteToUninitializedObject(object instance, obj...
class RankNArrayCloner (line 490) | private sealed class RankNArrayCloner : Cloner {
method RankNArrayCloner (line 493) | public RankNArrayCloner(Type type, Cloner elementCloner) : base(type...
method CaptureShallowStateAndEnqueueNestedState (line 497) | internal override State CaptureShallowStateAndEnqueueNestedState(obj...
class RankNArrayState (line 539) | private sealed class RankNArrayState : State {
method RankNArrayState (line 545) | public RankNArrayState(Type elementType, int[] lengths, int[] lowerB...
method CreateUninitializedObject (line 557) | public override object CreateUninitializedObject() {
method WriteToUninitializedObject (line 561) | public override void WriteToUninitializedObject(object instance, obj...
class NativeSerializationCloner (line 577) | private sealed class NativeSerializationCloner : Cloner {
method NativeSerializationCloner (line 584) | public NativeSerializationCloner(Type type, CloneEventHandlers event...
method CaptureShallowStateAndEnqueueNestedState (line 589) | internal override State CaptureShallowStateAndEnqueueNestedState(obj...
class NativeSerializationState (line 615) | private sealed class NativeSerializationState : State {
method NativeSerializationState (line 619) | public NativeSerializationState(NativeSerializationCloner cloner)
method NativeSerializationState (line 625) | public NativeSerializationState(NativeSerializationCloner cloner, ob...
method CreateUninitializedObject (line 635) | public override object CreateUninitializedObject() {
method WriteToUninitializedObject (line 639) | public override void WriteToUninitializedObject(object instance, obj...
class NativeSerializationProxyState (line 650) | private sealed class NativeSerializationProxyState : State {
method NativeSerializationProxyState (line 655) | public NativeSerializationProxyState(Type type, CloneEventHandlers e...
method NativeSerializationProxyState (line 661) | public NativeSerializationProxyState(Type type, CloneEventHandlers e...
method CreateUninitializedObject (line 672) | public override object CreateUninitializedObject() {
method WriteToUninitializedObject (line 676) | public override void WriteToUninitializedObject(object instance, obj...
type CustomSerializationMemberInfo (line 694) | private struct CustomSerializationMemberInfo {
class CustomSerializationCloner (line 700) | private sealed class CustomSerializationCloner : Cloner {
method CustomSerializationCloner (line 708) | public CustomSerializationCloner(Type type,
method CaptureShallowStateAndEnqueueNestedState (line 716) | internal override State CaptureShallowStateAndEnqueueNestedState(obj...
class CustomSerializationState (line 819) | private sealed class CustomSerializationState : State {
method CustomSerializationState (line 823) | public CustomSerializationState(CustomSerializationCloner cloner,
method CreateUninitializedObject (line 834) | public override object CreateUninitializedObject() {
method WriteToUninitializedObject (line 838) | public override void WriteToUninitializedObject(object instance, obj...
class SimpleImage (line 853) | private sealed class SimpleImage : CloneImage {
method SimpleImage (line 857) | internal SimpleImage(Cloner.State[] states, int deserializationCallb...
method CreateClone (line 863) | public override object CreateClone() {
class OrderedImage (line 898) | private sealed class OrderedImage : CloneImage {
method OrderedImage (line 903) | internal OrderedImage(Cloner.State[] states, int[] order, int deseri...
method GetRealObject (line 910) | public static object GetRealObject(object instance) {
method CreateClone (line 927) | public override object CreateClone() {
method InvokeDelayedOnDeserializedEvents (line 1003) | private void InvokeDelayedOnDeserializedEvents(List<int> indices, ob...
method ReplaceObjectReferenceInSCCWithRealObject (line 1011) | private void ReplaceObjectReferenceInSCCWithRealObject(object object...
method GetSerializedFields (line 1036) | internal static FieldInfo[] GetSerializedFields(Type type, out bool ty...
method BaseTypeNotSerializableMessage (line 1119) | internal static string BaseTypeNotSerializableMessage(Type baseType, T...
method CreateFieldValuesGetter (line 1133) | internal static Func<object, object[]> CreateFieldValuesGetter(Type ty...
method CreateFieldValuesSetter (line 1204) | internal static Action<object, object[], int[], object[]> CreateFieldV...
method CreateISerializableConstructorCaller (line 1272) | internal static Action<object, SerializationInfo, StreamingContext> Cr...
method GrowTopoIndices (line 1308) | private static void GrowTopoIndices() {
method GrowTopoIndices (line 1313) | private static int GrowTopoIndices(int splitIndex) {
method GrowTopoSubIndices (line 1329) | private static void GrowTopoSubIndices() {
method FindStronglyConnectedComponents (line 1342) | internal static int[] FindStronglyConnectedComponents(State[] states) {
method GrowSccIndexStack (line 1441) | private static void GrowSccIndexStack() {
method ComputeTopologicalOrder (line 1455) | internal static int[] ComputeTopologicalOrder(State[] states) {
type CloneEvents (line 1573) | [Flags]
class CloneEventHandlers (line 1585) | internal sealed class CloneEventHandlers {
method CloneEventHandlers (line 1595) | private CloneEventHandlers(CloneEvents events,
method InvokeOnSerializing (line 1608) | public void InvokeOnSerializing(object instance, StreamingContext cont...
method InvokeOnSerialized (line 1612) | public void InvokeOnSerialized(object instance, StreamingContext conte...
method InvokeOnDeserializing (line 1616) | public void InvokeOnDeserializing(object instance, StreamingContext co...
method InvokeOnDeserialized (line 1620) | public void InvokeOnDeserialized(object instance, StreamingContext con...
method WithBoxedArgument (line 1627) | private static Handler WithBoxedArgument<T>(Action<T,StreamingContext>...
method CreateHandler (line 1632) | private static Handler CreateHandler(Type type, MethodInfo mi) {
method Create (line 1647) | public static CloneEventHandlers Create(Type type) {
method CreateContinue (line 1673) | private static CloneEventHandlers CreateContinue(Type type, CloneEvent...
FILE: FParsecCS/ErrorMessage.cs
type ErrorMessageType (line 12) | public enum ErrorMessageType {
class ErrorMessage (line 25) | [DebuggerDisplay("{GetDebuggerDisplay(),nq}")]
method ErrorMessage (line 32) | internal ErrorMessage(ErrorMessageType messageType) {
class Expected (line 36) | public class Expected : ErrorMessage {
method Expected (line 38) | public Expected(string labelForExpectedInput) : base(ErrorMessageTyp...
class ExpectedString (line 43) | public class ExpectedString : ErrorMessage {
method ExpectedString (line 45) | public ExpectedString(string expectedString) : base(ErrorMessageType...
class ExpectedCaseInsensitiveString (line 50) | public class ExpectedCaseInsensitiveString : ErrorMessage {
method ExpectedCaseInsensitiveString (line 52) | public ExpectedCaseInsensitiveString(string expectedCaseInsensitiveS...
class Unexpected (line 57) | public class Unexpected : ErrorMessage {
method Unexpected (line 59) | public Unexpected(string labelForUnexpectedInput) : base(ErrorMessag...
class UnexpectedString (line 64) | public class UnexpectedString : ErrorMessage {
method UnexpectedString (line 66) | public UnexpectedString(string unexpectedString) : base(ErrorMessage...
class UnexpectedCaseInsensitiveString (line 71) | public class UnexpectedCaseInsensitiveString : ErrorMessage {
method UnexpectedCaseInsensitiveString (line 73) | public UnexpectedCaseInsensitiveString(string unexpectedCaseInsensit...
class Message (line 78) | public class Message : ErrorMessage {
method Message (line 80) | public Message(string message) : base(ErrorMessageType.Message) {
class NestedError (line 85) | public class NestedError : ErrorMessage {
method NestedError (line 90) | public NestedError(Position position, object userState, ErrorMessage...
class CompoundError (line 97) | public class CompoundError : ErrorMessage {
method CompoundError (line 104) | public CompoundError(string labelOfCompound,
class Other (line 116) | public class Other : ErrorMessage {
method Other (line 118) | public Other(object data) : base(ErrorMessageType.Other) {
method Equals (line 123) | public override bool Equals(object obj) { return Equals(obj as ErrorMe...
method Equals (line 125) | public bool Equals(ErrorMessage other) {
method EqualsHelper (line 145) | private bool EqualsHelper(ErrorMessage other) {
method GetHashCode (line 167) | public override int GetHashCode() {
class ErrorMessageComparer (line 171) | private class ErrorMessageComparer : Comparer<ErrorMessage> {
method Compare (line 172) | public override int Compare(ErrorMessage x, ErrorMessage y) {
method GetDebuggerDisplay (line 220) | internal string GetDebuggerDisplay() {
FILE: FParsecCS/ErrorMessageList.cs
class ErrorMessageList (line 10) | [DebuggerDisplay("{ErrorMessageList.GetDebuggerDisplay(this),nq}"),
method ErrorMessageList (line 16) | public ErrorMessageList(ErrorMessage head, ErrorMessageList tail) {
method ErrorMessageList (line 22) | public ErrorMessageList(ErrorMessage message) {
method ErrorMessageList (line 27) | public ErrorMessageList(ErrorMessage message1, ErrorMessage message2) {
method Merge (line 33) | public static ErrorMessageList Merge(ErrorMessageList list1, ErrorMess...
method MergeContinue (line 37) | private static ErrorMessageList MergeContinue(ErrorMessageList list1, ...
method ToHashSet (line 45) | public static HashSet<ErrorMessage> ToHashSet(ErrorMessageList message...
method ToSortedArray (line 57) | public static ErrorMessage[] ToSortedArray(ErrorMessageList messages) {
method Equals (line 65) | public override bool Equals(object obj) { return Equals(obj as ErrorMe...
method Equals (line 67) | public bool Equals(ErrorMessageList other) {
method GetHashCode (line 81) | public override int GetHashCode() {
method GetDebuggerDisplay (line 89) | internal static string GetDebuggerDisplay(ErrorMessageList list) {
class DebugView (line 100) | internal class DebugView {
method DebugView (line 104) | public DebugView(ErrorMessageList list) { List = list; }
FILE: FParsecCS/Errors.cs
class Errors (line 8) | internal static class Errors {
method Expected (line 9) | static private ErrorMessageList Expected(string str) {
method Unexpected (line 13) | static private ErrorMessageList Unexpected(string str) {
method Message (line 17) | static private ErrorMessageList Message(string str) {
method ExpectedAnyCharIn (line 69) | public static ErrorMessageList ExpectedAnyCharIn(string chars) {
method ExpectedAnyCharNotIn (line 73) | public static ErrorMessageList ExpectedAnyCharNotIn(string chars) {
method ExpectedStringMatchingRegex (line 77) | public static ErrorMessageList ExpectedStringMatchingRegex(string rege...
method ExpectedAnySequenceOfNChars (line 81) | public static ErrorMessageList ExpectedAnySequenceOfNChars(int n) {
method CouldNotFindString (line 85) | public static ErrorMessageList CouldNotFindString(string str) {
method CouldNotFindCaseInsensitiveString (line 89) | public static ErrorMessageList CouldNotFindCaseInsensitiveString(strin...
method OperatorsConflict (line 93) | public static ErrorMessageList OperatorsConflict<T,W,U>(Position posit...
method UnexpectedNonPrefixOperator (line 99) | public static ErrorMessageList UnexpectedNonPrefixOperator<T,W,U>(Oper...
method MissingTernary2ndString (line 105) | public static ErrorMessageList MissingTernary2ndString<T,W,U>(Position...
class ParserCombinatorInInfiniteLoopHelper (line 113) | public static class ParserCombinatorInInfiniteLoopHelper {
method CreateException (line 114) | public static Exception CreateException(string combinatorName, CharStr...
FILE: FParsecCS/FastGenericEqualityERComparer.cs
class FastGenericEqualityERComparer (line 12) | internal static class FastGenericEqualityERComparer<T> {
method Equals (line 18) | public static bool Equals(T left, T right) {
method Create (line 24) | public static EqualityComparer<T> Create<T>() {
class ClassStructuralEqualityERComparer (line 39) | private class ClassStructuralEqualityERComparer<T> : EqualityComparer<...
method Equals (line 40) | public override bool Equals(T x, T y) {
method GetHashCode (line 45) | public override int GetHashCode(T obj) {
class StructStructuralEqualityERComparer (line 51) | private class StructStructuralEqualityERComparer<T> : EqualityComparer...
method Equals (line 52) | public override bool Equals(T x, T y) {
method GetHashCode (line 56) | public override int GetHashCode(T obj) {
class ArrayStructuralEqualityERComparer (line 62) | private class ArrayStructuralEqualityERComparer<T> : EqualityComparer<...
method Equals (line 63) | public override bool Equals(T x, T y) {
method GetHashCode (line 67) | public override int GetHashCode(T obj) {
class FastGenericEqualityERComparer (line 23) | internal static class FastGenericEqualityERComparer {
method Equals (line 18) | public static bool Equals(T left, T right) {
method Create (line 24) | public static EqualityComparer<T> Create<T>() {
class ClassStructuralEqualityERComparer (line 39) | private class ClassStructuralEqualityERComparer<T> : EqualityComparer<...
method Equals (line 40) | public override bool Equals(T x, T y) {
method GetHashCode (line 45) | public override int GetHashCode(T obj) {
class StructStructuralEqualityERComparer (line 51) | private class StructStructuralEqualityERComparer<T> : EqualityComparer...
method Equals (line 52) | public override bool Equals(T x, T y) {
method GetHashCode (line 56) | public override int GetHashCode(T obj) {
class ArrayStructuralEqualityERComparer (line 62) | private class ArrayStructuralEqualityERComparer<T> : EqualityComparer<...
method Equals (line 63) | public override bool Equals(T x, T y) {
method GetHashCode (line 67) | public override int GetHashCode(T obj) {
FILE: FParsecCS/HexFloat.cs
method DoubleToHexString (line 35) | public static string DoubleToHexString(double x) {
method SingleToHexString (line 89) | public static string SingleToHexString(float x) {
FILE: FParsecCS/IdentifierValidator.cs
class IdentifierValidator (line 17) | public sealed class IdentifierValidator {
type IdentifierCharFlags (line 19) | [Flags]
method CheckAscii (line 37) | private void CheckAscii(char asciiChar) {
method SetIsAsciiNoIdChar (line 42) | public void SetIsAsciiNoIdChar(char asciiChar) { CheckAscii(asci...
method SetIsAsciiIdStartChar (line 43) | public void SetIsAsciiIdStartChar(char asciiChar) { CheckAscii(asci...
method SetIsAsciiIdNonStartChar (line 44) | public void SetIsAsciiIdNonStartChar(char asciiChar) { CheckAscii(asci...
method IdentifierValidator (line 46) | public IdentifierValidator() {
method IdentifierValidator (line 57) | internal IdentifierValidator(IdentifierCharFlags[] asciiCharOptions) {
method ValidateAndNormalize (line 65) | public string ValidateAndNormalize(string str, out int errorPosition) {
class IsIdStartCharOrSurrogateFSharpFunc (line 175) | private class IsIdStartCharOrSurrogateFSharpFunc : FSharpFunc<char, bo...
method IsIdStartCharOrSurrogateFSharpFunc (line 177) | public IsIdStartCharOrSurrogateFSharpFunc(IdentifierCharFlags[] asci...
method Invoke (line 179) | public override bool Invoke(char ch) {
class IsIdContinueCharOrSurrogateFSharpFunc (line 185) | private class IsIdContinueCharOrSurrogateFSharpFunc : FSharpFunc<char,...
method IsIdContinueCharOrSurrogateFSharpFunc (line 187) | public IsIdContinueCharOrSurrogateFSharpFunc(IdentifierCharFlags[] a...
method Invoke (line 189) | public override bool Invoke(char ch) {
class IsIdContinueCharOrJoinControlOrSurrogateFSharpFunc (line 195) | private class IsIdContinueCharOrJoinControlOrSurrogateFSharpFunc : FSh...
method IsIdContinueCharOrJoinControlOrSurrogateFSharpFunc (line 197) | public IsIdContinueCharOrJoinControlOrSurrogateFSharpFunc(Identifier...
method Invoke (line 199) | public override bool Invoke(char ch) {
method IsXIdStartOrSurrogate (line 247) | public static bool IsXIdStartOrSurrogate(char bmpCodePoint) { // shoul...
method IsXIdStartOrSurrogate_ (line 250) | private static uint IsXIdStartOrSurrogate_(char bmpCodePoint) {
method IsXIdContinueOrSurrogate (line 259) | public static bool IsXIdContinueOrSurrogate(char bmpCodePoint) { // sh...
method IsXIdContinueOrSurrogate_ (line 262) | private static uint IsXIdContinueOrSurrogate_(char bmpCodePoint) {
method IsXIdContinueOrJoinControlOrSurrogate (line 271) | public static bool IsXIdContinueOrJoinControlOrSurrogate(char bmpCodeP...
method IsXIdContinueOrJoinControlOrSurrogate_ (line 274) | private static uint IsXIdContinueOrJoinControlOrSurrogate_(char bmpCod...
method IsXIdStartSmp (line 283) | public static bool IsXIdStartSmp(int smpCodePointMinus0x10000) { // sh...
method IsXIdStartSmp_ (line 286) | private static uint IsXIdStartSmp_(int smpCodePointMinus0x10000) {
method IsXIdContinueSmp (line 300) | public static bool IsXIdContinueSmp(int smpCodePointMinus0x10000) { //...
method IsXIdContinueSmp_ (line 303) | private static uint IsXIdContinueSmp_(int smpCodePointMinus0x10000) {
FILE: FParsecCS/ManyChars.cs
type _16CharBuffer (line 11) | internal unsafe struct _16CharBuffer {
class Many1Chars (line 19) | internal class Many1Chars<TUserState> : FSharpFunc<CharStream<TUserState...
method Many1Chars (line 23) | public Many1Chars(FSharpFunc<CharStream<TUserState>, Reply<char>> char...
method Invoke (line 30) | public override Reply<string> Invoke(CharStream<TUserState> stream) {
method ParseRestOfString (line 41) | protected Reply<string> ParseRestOfString(CharStream<TUserState> strea...
class ManyChars (line 104) | internal class ManyChars<TUserState> : Many1Chars<TUserState> {
method ManyChars (line 105) | public ManyChars(FSharpFunc<CharStream<TUserState>, Reply<char>> charP...
method Invoke (line 109) | public override Reply<string> Invoke(CharStream<TUserState> stream) {
class Many1CharsTill (line 121) | internal class Many1CharsTill<TUserState, TEnd, TResult> : FSharpFunc<Ch...
method Many1CharsTill (line 127) | public Many1CharsTill(FSharpFunc<CharStream<TUserState>, Reply<char>> ...
method Invoke (line 138) | public override Reply<TResult> Invoke(CharStream<TUserState> stream) {
method ParseRestOfString (line 149) | protected Reply<TResult> ParseRestOfString(CharStream<TUserState> stre...
class ManyCharsTill (line 224) | internal class ManyCharsTill<TUserState, TEnd, TResult> : Many1CharsTill...
method ManyCharsTill (line 225) | public ManyCharsTill(FSharpFunc<CharStream<TUserState>, Reply<char>> c...
method Invoke (line 231) | public override Reply<TResult> Invoke(CharStream<TUserState> stream) {
FILE: FParsecCS/OperatorPrecedenceParser.cs
type Associativity (line 12) | public enum Associativity {
type OperatorType (line 19) | public enum OperatorType {
class Operator (line 26) | public class Operator<TTerm, TAfterString, TUserState> {
method Operator (line 44) | private Operator() {}
method Operator (line 47) | private Operator(OperatorType type,
method Operator (line 62) | internal Operator(string operatorString,
method Operator (line 76) | internal Operator(OperatorType type,
method Operator (line 92) | internal Operator(string leftString,
class NoAfterStringUnaryMappingAdapter (line 118) | protected class NoAfterStringUnaryMappingAdapter
method NoAfterStringUnaryMappingAdapter (line 122) | public NoAfterStringUnaryMappingAdapter(FSharpFunc<TTerm, TTerm> map...
method Invoke (line 123) | public override TTerm Invoke(TAfterString afterString, TTerm term) {...
class NoAfterStringBinaryMappingAdapter (line 126) | protected class NoAfterStringBinaryMappingAdapter
method NoAfterStringBinaryMappingAdapter (line 130) | public NoAfterStringBinaryMappingAdapter(OptimizedClosures.FSharpFun...
method Invoke (line 131) | public override TTerm Invoke(TAfterString afterString, TTerm leftTer...
class NoAfterStringTernaryMappingAdapter (line 136) | protected class NoAfterStringTernaryMappingAdapter
method NoAfterStringTernaryMappingAdapter (line 140) | public NoAfterStringTernaryMappingAdapter(OptimizedClosures.FSharpFu...
method Invoke (line 141) | public override TTerm Invoke(TAfterString afterLeftString, TAfterStr...
class InfixOperator (line 150) | public sealed class InfixOperator<TTerm, TAfterString, TUserState> : Ope...
method InfixOperator (line 151) | public InfixOperator(string operatorString,
method InfixOperator (line 159) | public InfixOperator(string operatorString,
class PrefixOperator (line 168) | public sealed class PrefixOperator<TTerm, TAfterString, TUserState> : Op...
method PrefixOperator (line 169) | public PrefixOperator(string operatorString,
method PrefixOperator (line 177) | public PrefixOperator(string operatorString,
class PostfixOperator (line 186) | public sealed class PostfixOperator<TTerm, TAfterString, TUserState> : O...
method PostfixOperator (line 187) | public PostfixOperator(string operatorString,
method PostfixOperator (line 195) | public PostfixOperator(string operatorString,
class TernaryOperator (line 204) | public sealed class TernaryOperator<TTerm, TAfterString, TUserState> : O...
method TernaryOperator (line 205) | public TernaryOperator(string leftString,
method TernaryOperator (line 215) | public TernaryOperator(string leftString,
class OperatorPrecedenceParser (line 227) | public class OperatorPrecedenceParser<TTerm, TAfterString, TUserState> :...
type OperatorData (line 229) | internal struct OperatorData { // declared as struct, so we can alloca...
method OperatorPrecedenceParser (line 294) | public OperatorPrecedenceParser() {
method FindPosition (line 301) | private bool FindPosition(Operator<TTerm, TAfterString, TUserState>[][...
method ThrowDefinitionConflictException (line 318) | private void ThrowDefinitionConflictException(Operator<TTerm, TAfterSt...
method AddOperator (line 324) | public void AddOperator(Operator<TTerm, TAfterString, TUserState> op) {
method RemoveInfixOperator (line 372) | public bool RemoveInfixOperator(string opString) { return Remove(Opera...
method RemovePrefixOperator (line 373) | public bool RemovePrefixOperator(string opString) { return Remove(Oper...
method RemovePostfixOperator (line 374) | public bool RemovePostfixOperator(string opString) { return Remove(Ope...
method RemoveTernaryOperator (line 375) | public bool RemoveTernaryOperator(string opStringLeft, string opString...
method RemoveOperator (line 382) | public bool RemoveOperator(Operator<TTerm,TAfterString,TUserState> op) {
method Remove (line 391) | private bool Remove(OperatorType operatorType, string opString) {
method PeekOp (line 437) | private
method Invoke (line 457) | public override Reply<TTerm> Invoke(CharStream<TUserState> stream) {
method ParseExpression (line 471) | internal
method ParsePrefixOp (line 523) | private
method ParseExpressionContinue (line 578) | private
method HandleMissingTernary2ndStringError (line 691) | private void HandleMissingTernary2ndStringError(ref OperatorData opData,
method HandlePossibleConflict (line 705) | private void HandlePossibleConflict(ref OperatorData prevOpData,
method ReportConflict (line 731) | private void ReportConflict(ref OperatorData prevOpData,
class DefaultMissingTernary2ndStringErrorFormatter (line 747) | private sealed class DefaultMissingTernary2ndStringErrorFormatter
method Invoke (line 750) | public override ErrorMessageList Invoke(Tuple<Position, Position, Te...
class DefaultOperatorConflictErrorFormatter (line 758) | private sealed class DefaultOperatorConflictErrorFormatter
method Invoke (line 763) | public override ErrorMessageList Invoke(Tuple<Position, Operator<TTe...
FILE: FParsecCS/Position.cs
class Position (line 8) | public sealed class Position : IEquatable<Position>, IComparable, ICompa...
method Position (line 14) | public Position(string streamName, long index, long line, long column) {
method ToString (line 18) | public override string ToString() {
method Equals (line 23) | public override bool Equals(object obj) {
method Equals (line 26) | public bool Equals(Position other) {
method GetHashCode (line 39) | public override int GetHashCode() {
method Compare (line 43) | public static int Compare(Position left, Position right) {
method CompareTo (line 48) | public int CompareTo(Position other) {
method CompareTo (line 59) | int IComparable.CompareTo(object value) {
FILE: FParsecCS/Properties/AssemblyInfo.cs
class CommonAssemblyInfo (line 17) | internal static partial class CommonAssemblyInfo {
FILE: FParsecCS/Reply.cs
type ReplyStatus (line 8) | public enum ReplyStatus {
type Reply (line 14) | [System.Diagnostics.DebuggerDisplay("{GetDebuggerDisplay(),nq}")]
method Reply (line 20) | public Reply(TResult result) {
method Reply (line 26) | public Reply(ReplyStatus status, ErrorMessageList error) {
method Reply (line 32) | public Reply(ReplyStatus status, TResult result, ErrorMessageList erro...
method Equals (line 38) | public override bool Equals(object other) {
method Equals (line 42) | public bool Equals(Reply<TResult> other) {
method GetHashCode (line 47) | public override int GetHashCode() {
method GetDebuggerDisplay (line 54) | private string GetDebuggerDisplay() {
FILE: FParsecCS/StringBuffer.cs
class StringBuffer (line 18) | internal unsafe sealed class StringBuffer : IDisposable {
method StringBuffer (line 25) | private StringBuffer(PoolSegment segment, int index, int length) {
class FreeChunk (line 31) | private sealed class FreeChunk {
method FreeChunk (line 48) | public FreeChunk(PoolSegment segment, int index, int size) {
method FreeChunk (line 57) | public FreeChunk(PoolSegment segment, FreeChunk prevInSegment, FreeC...
method InsertIntoSizeList (line 78) | private void InsertIntoSizeList() {
method Remove (line 101) | public void Remove() {
method MoveAfterSizeHasDecreased (line 118) | public void MoveAfterSizeHasDecreased() {
method MoveAfterSizeHasIncreased (line 138) | public void MoveAfterSizeHasIncreased() {
class PoolSegment (line 169) | private sealed class PoolSegment : IDisposable {
method PoolSegment (line 186) | public PoolSegment(int size, int firstBufferSize) {
method Dispose (line 202) | public void Dispose() {
method AllocateStringBufferInNewSegment (line 214) | public static StringBuffer AllocateStringBufferInNewSegment(int leng...
method AssertIntegrity (line 223) | [Conditional("DEBUG_STRINGBUFFER")]
method Create (line 287) | public static StringBuffer Create(int minLength) {
method Dispose (line 331) | public void Dispose() {
FILE: FParsecCS/Strings.cs
class Strings (line 8) | internal static class Strings {
method Quote (line 10) | static internal string Quote(string stringToQuote) {
method Quote (line 13) | static internal string Quote(string prefix, string stringToQuote, stri...
method AsciiQuote (line 17) | static internal string AsciiQuote(string prefix, string stringToQuote,...
method QuoteCaseInsensitive (line 21) | static internal string QuoteCaseInsensitive(string caseInsensitiveStri...
method OrdinalEnding (line 25) | static private string OrdinalEnding(int value) {
method ErrorPosition (line 111) | public static string ErrorPosition(Position position) {
method ErrorPosition (line 116) | public static string ErrorPosition(Position position, int unaccountedN...
method CompoundCouldNotBeParsedBecause (line 131) | public static string CompoundCouldNotBeParsedBecause(string compoundLa...
method AnyCharIn (line 202) | public static string AnyCharIn(string chars) {
method AnyCharNotIn (line 207) | public static string AnyCharNotIn(string chars) {
method StringMatchingRegex (line 212) | public static string StringMatchingRegex(string regexPattern) {
method ExpectedAnySequenceOfNChars (line 216) | public static string ExpectedAnySequenceOfNChars(int n) {
method CouldNotFindString (line 220) | public static string CouldNotFindString(string str) {
method CouldNotFindCaseInsensitiveString (line 224) | public static string CouldNotFindCaseInsensitiveString(string str) {
method OperatorToString (line 228) | internal static string OperatorToString<T,W,U>(Operator<T,W,U> op) {
method RelativePosition (line 240) | private static string RelativePosition(Position previousPosition, Posi...
method OperatorsConflict (line 254) | public static string OperatorsConflict<T,W,U>(Position previousPositio...
method OperatorStringIsRightPartOfTernaryOperator (line 263) | public static string OperatorStringIsRightPartOfTernaryOperator<T,W,U>...
method ColumnCountAssumesTabStopDistanceOfNChars (line 270) | public static string ColumnCountAssumesTabStopDistanceOfNChars(int n) {
method ErrorOccurredAtNthCharInCombiningCharacterSequence (line 274) | public static string ErrorOccurredAtNthCharInCombiningCharacterSequenc...
method InputContainsAtLeastNUnaccountedNewlines (line 280) | public static string InputContainsAtLeastNUnaccountedNewlines(int n) {
method ErrorOccurredAtBeginningOfSurrogatePair (line 285) | public static string ErrorOccurredAtBeginningOfSurrogatePair(string su...
method ErrorOccurredAtSecondCharInSurrogatePair (line 290) | public static string ErrorOccurredAtSecondCharInSurrogatePair(string s...
method CharAtErrorPositionIsIsolatedHighSurrogate (line 295) | public static string CharAtErrorPositionIsIsolatedHighSurrogate(char c...
method CharAtErrorPositionIsIsolatedLowSurrogate (line 299) | public static string CharAtErrorPositionIsIsolatedLowSurrogate(char ch) {
method CharBeforeErrorPositionIsIsolatedHighSurrogate (line 303) | public static string CharBeforeErrorPositionIsIsolatedHighSurrogate(ch...
method CharBeforeErrorPositionIsIsolatedLowSurrogate (line 307) | public static string CharBeforeErrorPositionIsIsolatedLowSurrogate(cha...
FILE: FParsecCS/Text.cs
class Text (line 12) | public static class Text {
method DetectPreamble (line 21) | internal static int DetectPreamble(byte[] buffer, int count, ref Encod...
method ReadAllRemainingCharsFromStream (line 78) | internal unsafe static int ReadAllRemainingCharsFromStream(char* buffe...
method FoldCase (line 107) | static public string FoldCase(string str) {
method FoldCase (line 128) | static unsafe public string FoldCase(string str) {
method FoldCase (line 160) | static public char FoldCase(char ch) {
method FindNewlineOrEOSChar (line 164) | internal static int FindNewlineOrEOSChar(string str) {
method NormalizeNewlines (line 180) | static public string NormalizeNewlines(string str) {
method CopyWithNormalizedNewlines (line 196) | static internal string CopyWithNormalizedNewlines(string src, int inde...
method NormalizeNewlines (line 234) | static unsafe public string NormalizeNewlines(string str) {
method CopyWithNormalizedNewlines (line 253) | static unsafe internal string CopyWithNormalizedNewlines(char* src, in...
method CountTextElements (line 347) | public static int CountTextElements(string str)
method IsSurrogate (line 362) | [Obsolete("Use System.Char.IsSurrogate instead.")]
method IsHighSurrogate (line 364) | [Obsolete("Use System.Char.IsHighSurrogate instead.")]
method IsLowSurrogate (line 366) | [Obsolete("Use System.Char.IsLowSurrogate instead.")]
method IsWhitespace (line 371) | public static bool IsWhitespace(char ch) {
class IsWhitespaceHelper (line 377) | internal unsafe static class IsWhitespaceHelper {
method IsWhitespace_ (line 417) | public static uint IsWhitespace_(char ch) {
method IsWhitespace (line 429) | public static bool IsWhitespace(char ch) { // should get inlined
method HexEscape (line 434) | internal static string HexEscape(char c)
method EscapeChar (line 447) | internal static string EscapeChar(char c) {
method Concat (line 463) | internal static string Concat(string str0, string str1, string str2, s...
method Escape (line 484) | internal static string Escape(string str, string prefix1, string prefi...
method AsciiEscape (line 511) | internal static string AsciiEscape(string str, string prefix1, string ...
method SingleQuote (line 537) | internal static string SingleQuote(string str) {
method SingleQuote (line 541) | internal static string SingleQuote(string prefix, string str, string p...
method DoubleQuote (line 545) | internal static string DoubleQuote(string str) {
method DoubleQuote (line 549) | internal static string DoubleQuote(string prefix, string str, string p...
Condensed preview — 176 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,759K chars).
[
{
"path": ".gitattributes",
"chars": 321,
"preview": "* text=auto\n\n*.cs text diff=csharp\n*.fs text diff=csharp\n*.fsi text diff=csharp\n*.fsx text diff=csharp\n\n*.sln tex"
},
{
"path": ".github/workflows/ci.yml",
"chars": 1207,
"preview": "name: Build and test\n\non:\n push:\n branches: [master]\n pull_request:\n\njobs:\n build-and-test-low-trust:\n runs-on:"
},
{
"path": ".gitignore",
"chars": 126,
"preview": "Thumbs.db\nBuild/bin/\nUnused/*\nbin/\nobj/\n*.user\n*.suo\n*.pyc\n*~\n*.asv\n*.swp\n*.pdb\npackages/\nversion.props\n/.vs/\n.idea\n.DS_"
},
{
"path": ".vscode/tasks.json",
"chars": 1260,
"preview": "{\n // See https://go.microsoft.com/fwlink/?LinkId=733558\n // for the documentation about the tasks.json format\n "
},
{
"path": "Build/FParsec.Common.targets",
"chars": 1234,
"preview": "<Project>\n\n <PropertyGroup Condition=\"'$(PlatformTarget)' == ''\">\n <PlatformTarget>AnyCPU</PlatformTarget>\n </Prope"
},
{
"path": "Build/fparsec-license.txt",
"chars": 1725,
"preview": "The FParsec library in source and binary form is distributed under the Simplified BSD License. The Simplified BSD Licens"
},
{
"path": "Directory.Build.props",
"chars": 1686,
"preview": "<Project ToolsVersion=\"15.0\">\n\n <PropertyGroup>\n <Configurations>Debug;Release;Debug-LowTrust;Release-LowTrust</Conf"
},
{
"path": "Doc/html/about/changelog.html",
"chars": 108549,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/about/contact.html",
"chars": 8133,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/about/fparsec-vs-alternatives.html",
"chars": 11088,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/about/index.html",
"chars": 6954,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/about/status-and-roadmap.html",
"chars": 10038,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/css/print.css",
"chars": 783,
"preview": "/*\n#wrapper {\n max-width: none;\n}\n*/\n\na, a code {\n color: #000000;\n text-decoration: underline;\n}\n\ncode, .code {\n"
},
{
"path": "Doc/html/css/screen-sidebar.css",
"chars": 2427,
"preview": "\nbody {\n background-color: #e9e9e9;\n}\n\nhtml {\n height: 100%;\n overflow-y: scroll;\n}\n\nbody {\n height: 100%;\n}"
},
{
"path": "Doc/html/css/style-ie.css",
"chars": 75,
"preview": "\ncode {\n white-space: nowrap; /* pre breaks the layout, even in ie8 */\n}"
},
{
"path": "Doc/html/css/style-ie6.css",
"chars": 104,
"preview": "\n#fixed-layer {\n display: none;\n}\n\n#main {\n margin-left: 0;\n border-right: solid 1px #d9d9d9;\n}"
},
{
"path": "Doc/html/css/style.css",
"chars": 9545,
"preview": "/* reset */\n\nhtml, body, div, span, h1, h2, h3, h4, h5, h6, p,\npre, a, code, em, strong, img, dl, dt, dd, ol, ul, li,\nta"
},
{
"path": "Doc/html/download-and-installation.html",
"chars": 29979,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/index.html",
"chars": 7804,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/license.html",
"chars": 9405,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/charparsers.html",
"chars": 454198,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/charstream.html",
"chars": 346431,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/error.html",
"chars": 69165,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/errormessage.html",
"chars": 50225,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/errormessagelist.html",
"chars": 27394,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/index.html",
"chars": 11510,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/operatorprecedenceparser.html",
"chars": 99737,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/parser-overview.html",
"chars": 72675,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/position.html",
"chars": 10835,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/primitives.html",
"chars": 274750,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/reply.html",
"chars": 27537,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/staticmapping.html",
"chars": 41559,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/reference/text.html",
"chars": 18992,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/tutorial.html",
"chars": 151083,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/applying-parsers-in-sequence.html",
"chars": 54637,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/customizing-error-messages.html",
"chars": 40896,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/debugging-a-parser.html",
"chars": 30866,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/index.html",
"chars": 15099,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/internals-of-a-simple-parser-function.html",
"chars": 45441,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/looking-ahead-and-backtracking.html",
"chars": 60244,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/parser-functions.html",
"chars": 16666,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/parsing-alternatives.html",
"chars": 28445,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/parsing-sequences.html",
"chars": 38563,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/parsing-with-user-state.html",
"chars": 44303,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/performance-optimizations.html",
"chars": 50836,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/running-parsers-on-input.html",
"chars": 16192,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/tips-and-tricks.html",
"chars": 53954,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/html/users-guide/where-is-the-monad.html",
"chars": 44424,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
},
{
"path": "Doc/misc/removed-many-variants.fs",
"chars": 4572,
"preview": "open FParsec\n\n// the following optimized variants of the many combinator were removed in the update to 0.9 of FParsec\n\nl"
},
{
"path": "Doc/src/changelog.txt",
"chars": 31517,
"preview": "[section Changelog]\n[no-subsection-numbers]\n\n[section#v2_0 Version 2.0, 2022-11-01]\n- Dropped support for .NET Framewor"
},
{
"path": "Doc/src/contact.txt",
"chars": 804,
"preview": "[section Contact]\n\n[section Contact]\nFParsec currently doesn't have its own discussion forum or mailing list.[br] (Plea"
},
{
"path": "Doc/src/documentation.txt",
"chars": 6835,
"preview": "[section FParsec Documentation]\n\n[html-template \"template.html\"]\n[(* [link-to-dir-for-index] *)]\n\n[default-code-languag"
},
{
"path": "Doc/src/download-and-installation.txt",
"chars": 9390,
"preview": "[section Download and installation]\n\nFParsec is distributed in source code form and as NuGet packages.\n\nIf you're new t"
},
{
"path": "Doc/src/fparsec-vs-alternatives.txt",
"chars": 2699,
"preview": "[section FParsec vs alternatives]\n\nThe following tables contain a bullet-point comparison between FParsec and the two m"
},
{
"path": "Doc/src/license.txt",
"chars": 2774,
"preview": "[section License]\n\nExcept where noted otherwise, the FParsec library in source and binary form is distributed under the"
},
{
"path": "Doc/src/reference-charparsers.txt",
"chars": 76537,
"preview": "\n[section#CharParsers FParsec.CharParsers]\n\n[interface-reference]\n[section Interface]\n[$$interface]\n[/section]\n\n[sectio"
},
{
"path": "Doc/src/reference-charstream.txt",
"chars": 75626,
"preview": "\n[section#CharStream FParsec.CharStream]\n\n[toc]\n[auto-link{hide-outer-auto-links = [\"UserState\"],\n links = [\""
},
{
"path": "Doc/src/reference-error.txt",
"chars": 10294,
"preview": "[auto-link{do-not-pick-up-as-link-targets = [\"Error\"], hide-outer-auto-links = [\"Position\"]}]\n[section#Error FParsec.Er"
},
{
"path": "Doc/src/reference-errormessage.txt",
"chars": 8274,
"preview": "\n\n[section#ErrorMessage FParsec.ErrorMessage]\n\n[interface-reference]\n\n[section Interface]\n[$$interface]\n[/section]\n\n[se"
},
{
"path": "Doc/src/reference-errormessagelist.txt",
"chars": 3287,
"preview": "\n\n\n[section#ErrorMessageList FParsec.ErrorMessageList]\n\nRepresents a list of error messages.\n\n[interface-reference]\n\n[s"
},
{
"path": "Doc/src/reference-operatorprecedenceparser.txt",
"chars": 22438,
"preview": "\n[interface-reference]\n[section#OperatorPrecedenceParser FParsec.OperatorPrecedenceParser]\n\n[section Interface]\n[$$inte"
},
{
"path": "Doc/src/reference-overview.txt",
"chars": 13063,
"preview": "[section Parser overview]\n\n- @Parsing single chars@\n- @Parsing strings directly@\n- @Parsing strings with the help of ot"
},
{
"path": "Doc/src/reference-position.txt",
"chars": 773,
"preview": "\n\n[auto-link{hide-outer-auto-links = [\"Position\", \"Index\", \"Line\", \"Column\"]}]\n[interface-reference]\n[section#Position "
},
{
"path": "Doc/src/reference-primitives.txt",
"chars": 35094,
"preview": "[section#Primitives FParsec.Primitives]\n\n[interface-reference]\n[section Interface]\n\n[$$interface]\n[/section]\n\n[section "
},
{
"path": "Doc/src/reference-reply.txt",
"chars": 3907,
"preview": "\n\n[section#Reply FParsec.Reply]\n\nRepresents the return value of a `Parser` function.\n\n[interface-reference]\n\n[section I"
},
{
"path": "Doc/src/reference-staticmapping.txt",
"chars": 8097,
"preview": "\n[section#StaticMapping FParsec.StaticMapping]\n\nThis module defines functions for creating optimized mapping functions "
},
{
"path": "Doc/src/reference-text.txt",
"chars": 1747,
"preview": "\n[section#Text FParsec.Text]\n\n[interface-reference]\n[section Interface]\n[$$interface]\n[/section]\n\n[section Members]\n[in"
},
{
"path": "Doc/src/reference.txt",
"chars": 540,
"preview": "\n[section Reference]\n [split-section]\n [output-in-subdirectory]\n\n [include \"reference-overview.txt\"]\n [include \"referen"
},
{
"path": "Doc/src/status-and-roadmap.txt",
"chars": 1191,
"preview": "[section Status and roadmap]\n\n[section Status]\nFParsec has been in development for several years and can now be conside"
},
{
"path": "Doc/src/template.html",
"chars": 1861,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xml"
},
{
"path": "Doc/src/tutorial.txt",
"chars": 43455,
"preview": "[section Tutorial]\n\nThis tutorial introduces you to the basic concepts of FParsec. Our goal is to give you an intuition"
},
{
"path": "Doc/src/users-guide.txt",
"chars": 114272,
"preview": "\n[section User's Guide]\n[split-section]\n[output-in-subdirectory]\n\n\n[#^ RError reference.Reply.members.Error]\n\nThis user"
},
{
"path": "FParsec/AssemblyInfo.fs",
"chars": 420,
"preview": "namespace FParsec\n\nopen System.Reflection\nopen System.Runtime.CompilerServices\nopen System.Runtime.InteropServices\n\n[<a"
},
{
"path": "FParsec/CharParsers.fs",
"chars": 66405,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2019\n// License: Simplified BSD License. See accompanying documentation.\n\n[<Aut"
},
{
"path": "FParsec/CharParsers.fsi",
"chars": 44100,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\n[<Aut"
},
{
"path": "FParsec/Emit.fs",
"chars": 22720,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "FParsec/Error.fs",
"chars": 16697,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: BSD-style. See accompanying documentation.\n\n[<AutoOpen>]\nmodul"
},
{
"path": "FParsec/Error.fsi",
"chars": 7442,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\n[<Aut"
},
{
"path": "FParsec/FParsec-LowTrust.fsproj",
"chars": 320,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFrameworks>netstandard2.0;netstandard2.1</TargetFramewo"
},
{
"path": "FParsec/FParsec.fsproj",
"chars": 285,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6.0</TargetFramework>\n </PropertyGroup>\n\n "
},
{
"path": "FParsec/FParsec.targets",
"chars": 3633,
"preview": "<Project>\n\n <PropertyGroup>\n <AssemblyName>FParsec</AssemblyName>\n <RootNamespace>FParsec</RootNamespace>\n <Ge"
},
{
"path": "FParsec/Internals.fs",
"chars": 16438,
"preview": "// Copyright (c) Stephan Tolksdorf 2009-2011\n// License: Simplified BSD License. See accompanying documentation.\n\n[<Com"
},
{
"path": "FParsec/Primitives.fs",
"chars": 43132,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\n[<Aut"
},
{
"path": "FParsec/Primitives.fsi",
"chars": 19928,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\n[<Aut"
},
{
"path": "FParsec/Range.fs",
"chars": 15129,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nnames"
},
{
"path": "FParsec/StaticMapping.fs",
"chars": 38991,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2012\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "FParsec/StaticMapping.fsi",
"chars": 3988,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "FParsec-LowTrust.sln",
"chars": 14196,
"preview": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.2862"
},
{
"path": "FParsec.sln",
"chars": 22830,
"preview": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.2862"
},
{
"path": "FParsecCS/Buffer.cs",
"chars": 2609,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2010\n// License: Simplified BSD License. See accompanying documentation.\n\nusing"
},
{
"path": "FParsecCS/CaseFoldTable.cs",
"chars": 92448,
"preview": "// Copyright (c) Stephan Tolksdorf 2009-2012\n// License: Simplified BSD License. See accompanying documentation.\n\nusing"
},
{
"path": "FParsecCS/CharSet.cs",
"chars": 4322,
"preview": "// Copyright (c) Stephan Tolksdorf 2008-2010\n// License: Simplified BSD License. See accompanying documentation.\n\nusing"
},
{
"path": "FParsecCS/CharStream.cs",
"chars": 164986,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2012\n// License: Simplified BSD License. See accompanying documentation.\n\n#if !"
},
{
"path": "FParsecCS/CharStreamLT.cs",
"chars": 73346,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\n#if L"
},
{
"path": "FParsecCS/Cloning.cs",
"chars": 84845,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2011\n// License: Simplified BSD License. See accompanying documentation.\n\n#if !"
},
{
"path": "FParsecCS/ErrorMessage.cs",
"chars": 11549,
"preview": "// Copyright (c) Stephan Tolksdorf 2010\n// License: Simplified BSD License. See accompanying documentation.\n\nusing Syst"
},
{
"path": "FParsecCS/ErrorMessageList.cs",
"chars": 4135,
"preview": "// Copyright (c) Stephan Tolksdorf 2010\n// License: Simplified BSD License. See accompanying documentation.\n\nusing Syst"
},
{
"path": "FParsecCS/Errors.cs",
"chars": 7141,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nusing"
},
{
"path": "FParsecCS/FParsecCS-LowTrust.csproj",
"chars": 218,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\" ToolsVersion=\"15.0\">\n\n <PropertyGroup>\n <TargetFrameworks>netstandard2.0;netstanda"
},
{
"path": "FParsecCS/FParsecCS.csproj",
"chars": 194,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\" ToolsVersion=\"15.0\">\n\n <PropertyGroup>\n <TargetFramework>net6.0</TargetFramework>\n "
},
{
"path": "FParsecCS/FParsecCS.targets",
"chars": 542,
"preview": "<Project>\n\n <PropertyGroup>\n <AssemblyName>FParsecCS</AssemblyName>\n <RootNamespace>FParsec</RootNamespace>\n <"
},
{
"path": "FParsecCS/FastGenericEqualityERComparer.cs",
"chars": 3040,
"preview": "// Copyright (c) Stephan Tolksdorf 2010\n// License: Simplified BSD License. See accompanying documentation.\n\nusing Syst"
},
{
"path": "FParsecCS/HexFloat.cs",
"chars": 24411,
"preview": "// Copyright (c) Stephan Tolksdorf 2008-2013\n// License: Simplified BSD License. See accompanying documentation.\n\nusing"
},
{
"path": "FParsecCS/IdentifierValidator.cs",
"chars": 40559,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2012\n// License: Simplified BSD License. See accompanying documentation.\n\nusing "
},
{
"path": "FParsecCS/ManyChars.cs",
"chars": 10848,
"preview": "// Copyright (c) Stephan Tolksdorf 2008-2010\n// License: Simplified BSD License. See accompanying documentation.\n\nusing"
},
{
"path": "FParsecCS/OperatorPrecedenceParser.cs",
"chars": 39936,
"preview": "// Copyright (c) Stephan Tolksdorf 2008-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nusing"
},
{
"path": "FParsecCS/Position.cs",
"chars": 2493,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2009\n// License: Simplified BSD License. See accompanying documentation.\n\nusing"
},
{
"path": "FParsecCS/Properties/AssemblyInfo.cs",
"chars": 1140,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n[assembly: ComVi"
},
{
"path": "FParsecCS/Reply.cs",
"chars": 2738,
"preview": "// Copyright (c) Stephan Tolksdorf 2008-2010\n// License: Simplified BSD License. See accompanying documentation.\n\nusing"
},
{
"path": "FParsecCS/StringBuffer.cs",
"chars": 16272,
"preview": "// Copyright (c) Stephan Tolksdorf 2009\n// License: Simplified BSD License. See accompanying documentation.\n\n#if !LOW_T"
},
{
"path": "FParsecCS/Strings.cs",
"chars": 20688,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nusing"
},
{
"path": "FParsecCS/Text.cs",
"chars": 19705,
"preview": "// Copyright (c) Stephan Tolksdorf 2009-2010\n// License: Simplified BSD License. See accompanying documentation.\n\nusing "
},
{
"path": "NuGet.config",
"chars": 205,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <packageSources>\n <clear />\n <add key=\"nuget\" v"
},
{
"path": "Samples/Calculator/Calculator-LowTrust.fsproj",
"chars": 353,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFrameworks>net6</TargetFrameworks>\n </PropertyGroup>\n\n "
},
{
"path": "Samples/Calculator/Calculator.fsproj",
"chars": 423,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <AssemblyName>Calculator</AssemblyName>\n <RootNamespace>Calc"
},
{
"path": "Samples/Calculator/Calculator.targets",
"chars": 329,
"preview": "<Project>\n <PropertyGroup>\n <AssemblyName>Calculator</AssemblyName>\n <RootNamespace>Calculator</RootNamespace>\n "
},
{
"path": "Samples/Calculator/InterpLexYacc-LowTrust.fsproj",
"chars": 361,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6</TargetFramework>\n </PropertyGroup>\n\n "
},
{
"path": "Samples/Calculator/calculator.fs",
"chars": 2398,
"preview": "\n// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\n// t"
},
{
"path": "Samples/FSharpParsingSample/FParsecVersion/InterpFParsec-LowTrust.fsproj",
"chars": 363,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFrameworks>net6</TargetFrameworks>\n </PropertyGroup>\n\n"
},
{
"path": "Samples/FSharpParsingSample/FParsecVersion/InterpFParsec.fsproj",
"chars": 343,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6</TargetFramework>\n </PropertyGroup>\n\n "
},
{
"path": "Samples/FSharpParsingSample/FParsecVersion/InterpFParsec.targets",
"chars": 618,
"preview": "<Project>\n\n <PropertyGroup>\n <AssemblyName>InterpFParsec</AssemblyName>\n <RootNamespace>InterpFParsec</RootNames"
},
{
"path": "Samples/FSharpParsingSample/FParsecVersion/main.fs",
"chars": 973,
"preview": "// Copyright (c) Stephan Tolksdorf 2008\n// License: Simplified BSD License. See accompanying documentation.\n\n// This is"
},
{
"path": "Samples/FSharpParsingSample/FParsecVersion/parser.fs",
"chars": 3526,
"preview": "// Copyright (c) Stephan Tolksdorf 2008.\n// License: Simplified BSD License. See accompanying documentation.\n\n// Compar"
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/Doc.html",
"chars": 1325,
"preview": "<html>\n\n<head>\n<title>The F# Parsing Sample</title>\n\n <link type=\"text/css\" rel=\"Stylesheet\" href=\"../../../doc/rmcstyl"
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/InterpLexYacc.fsproj",
"chars": 809,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <TargetFrameworks>net6</TargetFrameworks>\n <OutputType>Exe</"
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/ast.fs",
"chars": 579,
"preview": "// Copyright (c) Microsoft Corporation 2005-2006.\n// This sample code is provided \"as is\" without warranty of any kind."
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/interp.fs",
"chars": 1667,
"preview": "\n// Original code:\n// Copyright (c) Microsoft Corporation 2005-2006.\n// This sample code is provided \"as is\" wi"
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/lex.fs",
"chars": 77335,
"preview": "# 13 \"lex.fsl\"\n \n\nmodule Lex\n\nopen FSharp.Text.Lexing\nopen Parser\n\nlet lexeme = LexBuffer<char>.LexemeString\n\n// Fslex g"
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/lex.fsl",
"chars": 2638,
"preview": "// Copyright (c) Microsoft Corporation 2005-2006.\n// This sample code is provided \"as is\" without warranty of any kind."
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/main.fs",
"chars": 1576,
"preview": "\n// Original code:\n// Copyright (c) Microsoft Corporation 2005-2006.\n// This sample code is provided \"as is\" wi"
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/pars.fs",
"chars": 14813,
"preview": "// Implementation file for parser generated by fsyacc\nmodule Parser\n#nowarn \"64\";; // turn off warnings that type variab"
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/pars.fsi",
"chars": 1360,
"preview": "// Signature file for parser generated by fsyacc\nmodule Parser\ntype token = \n | DECR\n | LPAREN\n | RPAREN\n | WHILE\n "
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/pars.fsy",
"chars": 1828,
"preview": "// Copyright (c) Microsoft Corporation 2005-2006.\n// This sample code is provided \"as is\" without warranty of any kind."
},
{
"path": "Samples/FSharpParsingSample/LexYaccVersion/test.lang",
"chars": 128,
"preview": "\na := 1;\nb := 0;\nif a then d := 20;\nif b then d := 40;\nprint d;\nwhile d do \n begin\n d := decr(d);\n print d\n end;\npri"
},
{
"path": "Samples/FSharpParsingSample/readme.txt",
"chars": 514,
"preview": "This sample is derived from the parsing sample that shipped with the F# 1.9.4.19\ndistribution originally published at\nh"
},
{
"path": "Samples/JSON/JsonParser-LowTrust.fsproj",
"chars": 353,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFrameworks>net6</TargetFrameworks>\n </PropertyGroup>\n\n "
},
{
"path": "Samples/JSON/JsonParser.fsproj",
"chars": 333,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6</TargetFramework>\n </PropertyGroup>\n\n <"
},
{
"path": "Samples/JSON/JsonParser.targets",
"chars": 508,
"preview": "<Project>\n\n <PropertyGroup>\n <AssemblyName>JsonParser</AssemblyName>\n <RootNamespace>JsonParser</RootNamespace>\n "
},
{
"path": "Samples/JSON/PegParser-LowTrust.fsproj",
"chars": 349,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <TargetFramework>net6</TargetFramework>\n </PropertyGroup>\n\n <I"
},
{
"path": "Samples/JSON/ast.fs",
"chars": 713,
"preview": "// Copyright (c) Stephan Tolksdorf 2008\n// License: Simplified BSD License. See accompanying documentation.\n\nmodule Ast"
},
{
"path": "Samples/JSON/main.fs",
"chars": 865,
"preview": "// Copyright (c) Stephan Tolksdorf 2008\n// License: Simplified BSD License. See accompanying documentation.\n\n// See par"
},
{
"path": "Samples/JSON/parser.fs",
"chars": 3391,
"preview": "// Copyright (c) Stephan Tolksdorf 2008-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Samples/JSON/test_json.txt",
"chars": 550,
"preview": "{\n \"glossary\": {\n \"title\": \"example glossary\",\n \"GlossDiv\": {\n \"title\": \"S\",\n \"GlossList\": {\n \"Gl"
},
{
"path": "Samples/PEG/PegParser-LowTrust.fsproj",
"chars": 351,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <TargetFrameworks>net6</TargetFrameworks>\n </PropertyGroup>\n\n "
},
{
"path": "Samples/PEG/PegParser.fsproj",
"chars": 331,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <TargetFramework>net6</TargetFramework>\n </PropertyGroup>\n\n <I"
},
{
"path": "Samples/PEG/PegParser.targets",
"chars": 503,
"preview": "<Project>\n\n <PropertyGroup>\n <AssemblyName>PegParser</AssemblyName>\n <RootNamespace>PegParser</RootNamespace>\n "
},
{
"path": "Samples/PEG/ast.fs",
"chars": 758,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2008\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Samples/PEG/main.fs",
"chars": 908,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2008\n// License: Simplified BSD License. See accompanying documentation.\n\n// Th"
},
{
"path": "Samples/PEG/parser.fs",
"chars": 4643,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Samples/PEG/test_peg.txt",
"chars": 1488,
"preview": "# Source: \n# Parsing Expression Grammars: A Recognition-Based Syntactic Foundation, Bryan Ford.\n# 31st ACM Symposium on "
},
{
"path": "Samples/Tutorial/Tutorial-LowTrust.fsproj",
"chars": 352,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFrameworks>net6;</TargetFrameworks>\n </PropertyGroup>\n\n"
},
{
"path": "Samples/Tutorial/Tutorial.fsproj",
"chars": 331,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6</TargetFramework>\n </PropertyGroup>\n\n <"
},
{
"path": "Samples/Tutorial/Tutorial.targets",
"chars": 322,
"preview": "<Project>\n\n <PropertyGroup>\n <AssemblyName>Tutorial</AssemblyName>\n <RootNamespace>Tutorial</RootNamespace>\n <"
},
{
"path": "Samples/Tutorial/tutorial.fs",
"chars": 5121,
"preview": "// Copyright (c) Stephan Tolksdorf 2011\n// License: Simplified BSD License. See accompanying documentation.\n\n// Source "
},
{
"path": "Test/AllTests.fs",
"chars": 1893,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\n\nlet "
},
{
"path": "Test/BufferTests.fs",
"chars": 2947,
"preview": "// Copyright (c) Stephan Tolksdorf 2010\n// License: Simplified BSD License. See accompanying documentation.\n\nmodule FPa"
},
{
"path": "Test/CharParsersTests.fs",
"chars": 71133,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/CharSetTests.fs",
"chars": 1634,
"preview": "// Copyright (c) Stephan Tolksdorf 2008-2010\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/CharStreamTests.fs",
"chars": 105269,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/CloningTests.fs",
"chars": 60278,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/HexFloatTests.fs",
"chars": 38578,
"preview": "// Copyright (c) Stephan Tolksdorf 2008-2010\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/IdentifierValidatorTests.fs",
"chars": 159823,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2012\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/OperatorPrecedenceParserTests.fs",
"chars": 34846,
"preview": "// Copyright (c) Stephan Tolksdorf 2008-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/PrimitivesTests.fs",
"chars": 24238,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/RangeTests.fs",
"chars": 13571,
"preview": "// Copyright (c) Stephan Tolksdorf 2010\n// License: Simplified BSD License. See accompanying documentation.\n\nmodule FPa"
},
{
"path": "Test/StaticMappingTests.fs",
"chars": 14513,
"preview": "// Copyright (c) Stephan Tolksdorf 2010-2011\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/StringBufferTests.fs",
"chars": 2578,
"preview": "// Copyright (c) Stephan Tolksdorf 2009-2010\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/Test-LowTrust.fsproj",
"chars": 338,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <TargetFramework>net6</TargetFramework>\n </PropertyGroup>\n\n <"
},
{
"path": "Test/Test.fs",
"chars": 6818,
"preview": "// Copyright (c) Stephan Tolksdorf 2007-2009\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "Test/Test.fsproj",
"chars": 319,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <TargetFramework>net6</TargetFramework>\n </PropertyGroup>\n\n <I"
},
{
"path": "Test/Test.targets",
"chars": 1345,
"preview": "<Project>\n <PropertyGroup>\n <AssemblyName>Test</AssemblyName>\n <RootNamespace>FParsec.Test</RootNamespace>\n <O"
},
{
"path": "Test/TextTests.fs",
"chars": 4045,
"preview": "// Copyright (c) Stephan Tolksdorf 2009-2010\n// License: Simplified BSD License. See accompanying documentation.\n\nmodul"
},
{
"path": "global.json",
"chars": 78,
"preview": "{\n \"sdk\": {\n \"version\": \"7.0.100\",\n \"rollForward\": \"latestMajor\"\n }\n}\n"
},
{
"path": "pack.ps1",
"chars": 1473,
"preview": "# This PowerShell script builds the FParsec NuGet packages. \n#\n# Run this script from the VS2019 Command Prompt, e.g. wi"
},
{
"path": "readme.md",
"chars": 1809,
"preview": "# FParsec\n\nFParsec is a [parser combinator](https://en.wikipedia.org/wiki/Parser_combinator) library for [F#](http://fsh"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the stephan-tolksdorf/fparsec GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 176 files (4.3 MB), approximately 1.1M tokens, and a symbol index with 532 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.