Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8727081
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 13, 20262026-06-13T08:22:25+00:00 2026-06-13T08:22:25+00:00

I know that it is possible to pass parameters to a lexer: rule tokenize

  • 0

I know that it is possible to pass parameters to a lexer:

rule tokenize scope = parse
  | whitespace       { tokenize scope lexbuf                       }
  | newline          { newline lexbuf; tokenize scope lexbuf       }

but I’m not able to define my parser start symbol in a similar fashion.

I tried to define it like this: (thanks to this question)

%type < (IScope, AST.Script) Fun > Script

// with the following definition in the head section of the parser:
type ('a,'b) Fun = 'a -> 'b

But then I would have to define every non-terminal symbol like this and they would all return lambdas. This is not what I’m trying to achieve though, I’d like to be able to access the scope parameter within several non-terminals and execute their action during parsing.

I noticed that there is a ParserLocalStore in the IParseState type, which contains only the LexBuffer (only checked by debugging). Since I have access to it via parseState in every non-terminal, may I be able to store parameters in there, or would that be a bad idea?

I thought about using mutable variables in the head section of the parser, but they would be static (I think?) and that would prevent me from parsing multiple inputs simultaneously…

Edit:

Currently I store the scope parameter in specific tokens:

%token <string * IScope> IDENT

I pass scope to the Lexer, who embeds it in the relevant tokens when he creates them… I really don’t like this solution, but I was unable to come up with something better yet.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-13T08:22:27+00:00Added an answer on June 13, 2026 at 8:22 am

    There is a Dictionary<string, obj> in the LexBuffer, which can also be obtained via parseState. Having found no better solution, I ended up storing my parameters there.

    I’m aware that this is very likely not intended to be used in such a way and may not be available in future versions of fsyacc, but I’m sticking to it for now. In case someone needs to do the same, I leave the two extension methods here which I created to access my parameters in a cleaner manner:

    type IParseState with
        member x.LexBuffer() = x.ParserLocalStore.["LexBuffer"] :?> LexBuffer<char>
    
    type LexBuffer<'a> with
        member x.SomeParameter
            with get() = x.BufferLocalStore.["SomeParameter"] :?> SomeParamType
            and set(v) = x.BufferLocalStore.["SomeParameter"] <- v
    

    Since there haven’t been any answers yet, I’ll accept this one for now.
    Feel free though to suggest a better solution and I’ll change the accepted answer.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I know that it is possible to pass in parameters via URL to ClickOnce
I know that it is possible to read commands output with a pipe? But
Hey i dont know if that is possible but i want to set a
I am curious to know that could it be possible that in the below
I know that it's possible to implicitly provide asynchronous interaction using: Asynchronous Delegates Asynchronous
I know that it is possible to add swf metadata to the compile command
I know that it is possible to create .xls files from Delphi using ADO,
I know that it is possible read and write data from mongodb via hadoop.
So I know that it's possible to create scripts for use on spreadsheets using
I just came to know that it's possible to record call voice (both incoming

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.