Is there an easy way to get lexing and parsing to run concurrently when using fslex and fsyacc?
Lexing and parsing concurrently in F#
1.3k Views Asked by J D At
1
There are 1 best solutions below
Related Questions in PARSING
- TypeScript: Type checking while parsing an arbitrary JSON that is typed/
- How to have fixed options using Option.Applicative in haskell?
- How to convert mathematical expression to lambda function in C++?
- JsonObject throws an exception: JSONObject["employer_website"] is not a string (class org.json.JSONObject$Null : null)
- Trying to fix my c++ code for it to read the right amount of nodes from a file
- Selenium get page after "loading" page
- Parse tag in html via Google Sheets (importxml)
- FluentD / Fluent-Bit: Concatenate multiple lines of log files and generate one JSON record for all key-value from each line
- Editing non-String values in JComboBox
- Handling multiple errors in Bison parser
- Which is the most idiomatic way to parse an i32 from ascii in Rust
- I got this error from a JSON Validator - what does this mean?
- Conflict between lexer rules in ANTLR4 for Fortran grammar
- mqtt message parsing problem in a node.js
- How to print error code from URL response in swift
Related Questions in F#
Related Questions in FSYACC
- Convert a ocamlyacc's Parser.mly file to fsyacc's Parser.fsy got " End of file on lexing stream" error
- FsYacc filename.targets
- Given a lexer implemented in FsLexYacc, how do I get all of the tokens?
- FsLexYacc compile errors?
- Why 1*2+3 is parsed as 1*(2+3) even though operator precedence or associativity is not declared?
- Bug in a simple parser specification in F#
- My prebuild event command with reference to a library (from Nuget) does not compile the program
- How to setup Visual Studio/JetBrains Rider for interpreter development in F#?
- FsLex aborts with parse error on '{'
- FsLex FsYacc: How to create a language with a multi-line comment
- Creating Simple Parser in F#
- Creating a Functional Parser in F# using Visual Studio 2013 with FsLex and FsYacc
- Using record types in FSYACC
- FsLexYacc : Tests/MiniProject "incorrect Import in .fsproj"
- Differentiate between 'minus' operator and negative numbers in F# lex/yacc parser
Related Questions in FSLEX
- How to use FsLexYacc with Visual Studio 2022 in F#?
- Given a lexer implemented in FsLexYacc, how do I get all of the tokens?
- FsLexYacc compile errors?
- Why are the newline and the white space treated differently in the lexer specification?
- Under the command line, how to compile a F# lexer and then run it on a Mac OS?
- What is that "arg00" in the type of LexBuffer<char>.LexemeString?
- My prebuild event command with reference to a library (from Nuget) does not compile the program
- How to setup Visual Studio/JetBrains Rider for interpreter development in F#?
- FsLex aborts with parse error on '{'
- FsLexYacc whitespace indentation
- FsLex FsYacc: How to create a language with a multi-line comment
- Creating Simple Parser in F#
- Creating a Functional Parser in F# using Visual Studio 2013 with FsLex and FsYacc
- FsLexYacc : Tests/MiniProject "incorrect Import in .fsproj"
- Differentiate between 'minus' operator and negative numbers in F# lex/yacc parser
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
First of all in real case lexing and parsing is time critical. Especially if you need to process tokens before parsing. For example -- filtering and collecting of comments or resolving of context-depended conflicts. In this case parser often wait for a lexer.
The answer for a question. You can run lexing and parsing concurrently with MailboxProcessor.
Core of idea. You can run lexer in mailBoxProcessor. Lexer should produce new tokens, process and post them. Lexer often faster than parser, and sometimes it should wait for a parser. Parser can receive next token when necessary. Code provided below. You can modify timeouts, traceStep to find optimal for your solution.
Full solution is available here: https://github.com/YaccConstructor/ConcurrentLexPars In this solution we only demonstrate full implementation of described idea . Performance comparison is not actual because semantic calculation is very simple and no tokens processing.
To find out performance comparison result look at full report https://docs.google.com/document/d/1K43g5jokNKFOEHQJVlHM1gVhZZ7vFK2g9CJHyAVtUtg/edit?usp=sharing Here we compare performance of sequential and concurrent solution for parser of T-SQL subset. Sequential: 27 sec, concurrent: 20 sec.
Also we use this technique in production T-SQL translator.