今使ってる、字句解析器
今使ってる字句解析器です。javascriptです。
あとでコメントとかちゃんと考えないとなぁ。
var buffer, line, LPAR=4, RPAR=5; var yylexa = [ new RegExp("^[\\n]"), function(){line++;}, new RegExp("^[ \\t]+"), function(){}, new RegExp("^[A-Za-z_]([A-Za-z]|[0-9])*"), function(){return "ID";}, new RegExp("^(\\\"([^\\\\\\\"]|(\\\\[\\x00-\\xff]))*\\\")"), function(){return "STRING";}, new RegExp("^([\\!\\%\\&\\*\\+\\-\\/\\:\\<\\=\\>\\?\\@\\^~]+|[\\.\\,\\;])"), function(){return "ID";}, new RegExp("^([0-9]+(\\.[0-9]+)|([0-9])+)"), function(){return "NUMBER";}, new RegExp("^(\\(|\\{|\\[)"), function(){return LPAR;}, new RegExp("^(\\)|\\}|\\])"), function(){return RPAR;}]; var yylex = function() { for(var i = 0; i < yylexa.length; i += 2){ var r=yylexa[i],m=buffer.match(r); if(m!=null&&m.length>0&&m[0].length>0){ token=m[0]; buffer=buffer.substring(m[0].length, buffer.length); r=yylexa[i+1](); if(r!=null)return r; i=-2; continue; } } return (buffer.length == 0) ? 0 : -1; };
new RegExpつかわないで、/^(\|\{|\[)/とか書いたほうが普通にjavascript使う分には
いいです。もしかすると{/^(\|\{|\[)/: function(){return LPAR;}}とかと連想配列
にしておくと、いいのかもしれない。