0

我有以下状态图,用于验证字符串是否与格式匹配。 状态图

我想在 xstate 中重新创建与 fsm 匹配的这种语言。机器应该为,等返回true,否则返回false。它应该具有与正则表达式完全相同的输出acabcabbbbbcstring.match(/^ab*c$/) !== null;

我目前有以下内容:

const machine = Machine({
    initial: 'start',
    states: {
        start: {
            on: {A: 'state1'}
        },
        state1: {
            on: {
                B: 'state1',
                C: 'end'
            }
        },
        end: {}
    }
});

有没有办法通过动作和上下文来检查一个字符串是否与这种语言 fsm 匹配,直到它达到最终状态。

当然,我可以只使用正则表达式,但为了这个问题,我已经简化了问题。我要解析的实际语言不规则,需要 pda / 上下文。我只想知道使用 xstate 进行语言/字符串解析的结构。

4

1 回答 1

0
const checkRegex =(content,event)=>{
if(event.match(/^ab*c$/) !== null){
context.valid =true;
}
}
const regexMachine = Machine({
initial: 'state1',
states: {
    state1:{
        on:{
          VALIDATE: {
                target:"state2"
               }
        }
     }
    state2: {
        invoke:{
              src:(context,event)=>checkRegex(event)},
              onDone:{target:"end"}
              onError:{target:"state1"}
    },
    end: {
         type: "final"
     }
}
});

组件用法:

const [current,send] = useMachine(regexMachine);

send("VALIDATE","aaabbbcc");
于 2021-11-16T22:34:42.273 回答