在PEG.js上为STRING.STRING.STRING创建语法表达式

时间:2013-11-05 13:58:58

标签: javascript peg

我正在寻找一个用于匹配的peg.js语法表达式:

  • "variable" #Fails
  • "variable." #Fails
  • "" #Fails
  • "variable.variable"#Ok
  • "variable.variable.variable.variable.variable" #Ok
输入

我希望

  • {PATH: "variable.variable"}
  • {PATH: "variable.variable.variable.variable.variable"}

Sample.pegjs

start = 
    PATH_EXP

STRING_EXP =
    chars:[0-9a-zA-Z_]+ { return chars.join(""); }

PATH_EXP =    
    path:(STRING_EXP "." STRING_EXP) { return {PATH: path.join("")}; }

我不知道如何使表达式重复,但也使它成为可选的。

1 个答案:

答案 0 :(得分:1)

这是我想出去摆脱“。”字符。我承认我之前从未使用过peg.js:)

PATH_EXP =    
    (first:STRING_EXP rest:("." STRING_EXP)*) {
      return {
        PATH: first +  
              rest.map(function(v) {
                return v[1]; 
              }).join("")
      };
    }

编辑 - 哦等等这更好:

PATH_EXP = 
    first:STRING_EXP rest:("." s:STRING_EXP { return "." + s; })+ {
      return {
        PATH: first + rest.join('')
      };
    }

编辑 - 如果你想要“。”你将它们包含在第二部分内的动作中的字符。错过了那部分问题。