gpt4 book ai didi

javascript - JISON 解析命令时出现问题

转载 作者:行者123 更新时间:2023-12-03 11:22:43 27 4
gpt4 key购买 nike

嗨,我是 JISON 的新手,并陷入了以下代码:
用于解析命令:

 project -a -n <projectname>  

我的代码如下:

"project"   {return 'PROJECTCOMMAND';}
"-n" {return 'NAMEOPTION';}
("--add"|"-a") {return 'ADDOPTION';}
[-a-zA-Z0-9@\.]+ {return 'TEXT';}

line :
PROJECTCOMMAND ADDOPTION NAMEOPTION TEXT
{
//Prject command with project name as argument
var res = new Object();
res.value = "addProject name";
res.name = $4;
return res;
}

如果命令如下,则效果很好:

project -a -n samplePro  

但是如果命令是:

,则会出现错误
project -a -n project  

错误:需要文本并获得 PROJECTCOMMAND。
如果命令中的项目名称是project1、project2、myproject 等,也会发生同样的情况。有什么办法可以解决这个问题吗?
提前致谢

最佳答案

解决这个问题的一种方法是使用状态。我在这里所说的“状态”的正式名称是“开始条件”,但我发现“状态”对我来说比“开始条件”更清晰。

  1. 我已经用 %x TEXT 声明了一个新的词法分析器状态。有一个INITIAL隐式存在的状态。这是词法分析器启动时的状态。任何未获得指定状态的模式仅存在于 INITIAL 中。状态。

  2. 我已经输入了 <TEXT>在导致 TEXT 的模式前面 token ,以便仅当我们位于 TEXT 时才生成此 token 。状态。

  3. 我已设置空白模式以应用于状态 INITIALTEXT .

  4. 我做到了 -n导致词法分析器输入 TEXT状态和当 TEXT遇到 token,则弹出状态。

有了这个,当 Jison 遇到 -n 时在project -a -n project它进入TEXT状态唯一期望的是空格,它被忽略,或 TEXT代币。然后 Jison 处理空白,并忽略它。然后它处理后面的文本,该文本被理解为 TEXT token 并弹出状态。

完整代码:

%lex

%x TEXT

%%
"project" {return 'PROJECTCOMMAND';}
"-n" {this.begin('TEXT'); return 'NAMEOPTION';}
("--add"|"-a") {return 'ADDOPTION';}
<TEXT>[-a-zA-Z0-9@\.]+ {this.popState(); return 'TEXT';}
<INITIAL,TEXT>\s+ // Ignore white space...

/lex

%%

line :
PROJECTCOMMAND ADDOPTION NAMEOPTION TEXT
{
//Prject command with project name as argument
var res = new Object();
res.value = "addProject name";
res.name = $4;
return res;
} ;

关于javascript - JISON 解析命令时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27036320/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com