Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# FSYacc生成的解析器是线程安全的吗?_F#_Fsyacc - Fatal编程技术网

F# FSYacc生成的解析器是线程安全的吗?

F# FSYacc生成的解析器是线程安全的吗?,f#,fsyacc,F#,Fsyacc,如果我使用FSYacc生成解析器,它会是线程安全的吗 我问这个问题的唯一原因是因为 Parsing.rhs\u start\u pos和Parsing.symbol\u end\u pos 似乎没有任何状态传递给它们,这会导致我假设它们从共享位置获取当前的非终端/符号,对吗 在反映了代码之后,我看到他们是从一个静态属性获取位置的 internal static IParseState parse_information { get { return parse_i

如果我使用FSYacc生成解析器,它会是线程安全的吗

我问这个问题的唯一原因是因为

Parsing.rhs\u start\u pos
Parsing.symbol\u end\u pos

似乎没有任何状态传递给它们,这会导致我假设它们从共享位置获取当前的非终端/符号,对吗

在反映了代码之后,我看到他们是从一个静态属性获取位置的

internal static IParseState parse_information
{
    get
    {
        return parse_information;
    }
    set
    {
        parse_information = value;
    }
}
这是正确的吗?如果是,我能做些什么

编辑:我还看到一个名为
set\u parse\u state

public static void set_parse_state(IParseState x)
{
    parse_information = x;
}

但是这仍然不能解决我的问题…

我真的不想回答我自己的问题,但是因为这可以在将来的某一天拯救别人一个悲伤的世界,我会的

事实证明,解析模块中提供的函数不是线程安全的。 但是,您可以在非终端操作中访问
parseState
“变量”,该变量的类型为
IParseState

例如(粗糙但与我一起工作): 如果你有一个非终结符,比如

%token<string> NAME %% Person: NAME NAME { $1 (* action *) } 而
符号\u end\u pos
执行以下操作:

let startPos,endPos = parseState.InputRange(n) let startSymb,endSymb = parseState.ResultRange 让startSymb,endSymb=parseState.ResultRange 我希望这有帮助

let startPos,endPos = parseState.InputRange(n) let startSymb,endSymb = parseState.ResultRange