A: A 'a' | 'b'
A: R: /* vacío */ |
expression = -> result = term() while and is "ADDOP" type = . match "ADDOP" right = result = type: left: result right: right result
statement = -> result = null if and . is "ID" left = type: "ID" value: . match "ID" match "=" right = () result = type: "=" left: left right: right else if lookahead and lookahead.type is "P" match "P" right = result = type: "P" value: right else if lookahead and lookahead.type is "IF" match "IF" left = match "THEN" right = result = type: "IF" left: left right: right else # Error! throw "Syntax Error. Expected identifier but found " + (if lookahead then lookahead.value else "end of input") + " near '#{input.substr(lookahead.from)}'" result
condition = -> left = type = . match "COMPARISON" right = () result = type: type left: left right: right result
link rel="" type="image/jpg" href="images/favicon.jpg"
heroku
git@heroku.com:.git
git master
git push :
S = 'a'+ B !('a'/'b'/'c') A = 'a' A? 'b' B = 'b' B? 'c'
S = if C:C then S1:S else S2:S { return [ 'ifthenelse', C, S1, S2 ]; } / if C:C then S:S { return [ 'ifthen', C, S]; } / O { return 'O'; } _ = ' '* C = _'c'_ { return 'c'; } O = _'o'_ { return 'o'; } else = _'else'_ if = _'if'_ then = _'then'_
if c then if c then o else o
S = if C:C then S:S { return [ 'ifthen', C, S]; } / if C:C then S1:S else S2:S { return [ 'ifthenelse', C, S1, S2 ]; }
var PEG = require ("pegjs"); var grammar = "s = ('a' / 'b')+"; var parser = PEG.(grammar); var input = process.argv[] || 'abba'; console.log(parser.parse(input))
[~/srcPLgrado/pegjs/examples(master)]$ node abba.pegjs abb [ 'a', 'b', 'b' ]
S = ( ) 'a'+ B: !('c'/[]) { return B; } A = 'a' A:A? 'b' { if (A) { return A+1; } else return 1; } B = 'b' B:B? 'c' { if (B) { return B+1; } else return 1; }
P = prog:N+ { return prog; } N = chars:$(!Begin ANY)+ { return chars;} / C C = Begin chars: End { return chars.join(''); } T = C / (! char:ANY) { return char;} Begin = '(*' End = '*)' ANY = 'z' /* any character */ { return 'z'; } / char: { return char; }
DataMapper.(:default,· ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/database.db" ) class PL0Program include :: ·· :name, String, :key => true :source, String, :length => 1..1024 end DataMapper. DataMapper.
post '/save' do name = params[:fname] c = PL0Program.(:name => name) if c c.source = params["input"] c. else c = PL0Program.new c.name = params["fname"] c.source = params["input"] c. end '/' end
exp = t:term r:(ADD term)* { return tree(t,r); } term = f:factor r:(MUL factor)* { return tree(f,r); } ADD = _ op:[+-] _ { return op; } MUL = _ op:[*/] _ { return op; }
{ var tree = function(f, r) { if (r. > 0) { var last = r.(); var result = { type: , left: , right: }; } else { var result = f; } return result; } }