Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make a Grammar expression for STRING.STRING.STRING on PEG.js

Tags:

javascript

peg

I am looking for a peg.js grammar expression for matching against:

  • "variable" # Fails
  • "variable." # Fails
  • "" # Fails
  • "variable.variable" # Ok
  • "variable.variable.variable.variable.variable" #Ok

input I expect

  • {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("")}; }

I don't know how to make the expression repeat, but also make it optional.

like image 505
rkmax Avatar asked Mar 22 '26 01:03

rkmax


1 Answers

Here's what I came up with to get rid of the "." characters. I'll admit that I've never used peg.js before :)

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

edit — oh wait this is better:

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

edit — clearly if you want the "." characters you'd include them in the action inside that second part. Missed that part of the question.

like image 119
Pointy Avatar answered Mar 23 '26 13:03

Pointy



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!