Chinaunix首页 | 论坛 | 博客
  • 博客访问: 212967
  • 博文数量: 70
  • 博客积分: 2050
  • 博客等级: 大尉
  • 技术积分: 700
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-15 21:42
文章分类

全部博文(70)

文章存档

2013年(1)

2011年(5)

2010年(3)

2009年(9)

2008年(17)

2007年(6)

2006年(29)

我的朋友

分类:

2009-12-24 16:50:54

%% 词法分析jscan.xrl
Definitions.
D = [0-9]
D1 = [1-9]
Rules.
[\s\t\r\n]+ : skip_token.
{  : {token, {'{', TokenLine}}.
}  : {token, {'}', TokenLine}}.
\[ : {token, {'[', TokenLine}}.
\] : {token, {']', TokenLine}}.
\: : {token, {':', TokenLine}}.
,  :   {token, {',', TokenLine}}.
null  :  {token, {constant, TokenLine, undefined}}.
true  :  {token, {constant, TokenLine, true}}.
false : {token, {constant, TokenLine, false}}.
(\+|\-)?{D1}{D}* :
    {token, {number, TokenLine, list_to_integer(TokenChars)}}.
(\+|\-)?(0|{D1}{D}*)\.{D}+((e|E)(\+|\-)?{D1}{D}*)? :
    {token, {number, TokenLine, element(1, string:to_float(TokenChars))}}.
"[^"]*" :
    {token, {string, TokenLine, lists:sublist(TokenChars, 2, TokenLen - 2)}}.

Erlang code.

%% 语法分析jparse.yrl
Nonterminals object pairs pair value array values.
Terminals '{' '}' ':' '[' ']' ',' number constant string.
Rootsymbol object.

object -> '{' '}': [].
object -> '{' pairs '}': '$2'.
pairs -> pair: ['$1'].
pairs -> pair ',' pairs: ['$1' | '$3'].
pair -> string ':' value: {value_of('$1'), '$3'}.
value -> array: '$1'.
value -> object: '$1'.
value -> constant: value_of('$1').
value -> number: value_of('$1').
value -> string: value_of('$1').
array -> '[' ']': [].
array -> '[' values ']': '$2'.
values -> value: ['$1'].
values -> value ',' values: ['$1' | '$3'].

Erlang code.
value_of(Token) ->
    element(3, Token).
%% 生成和编译
Eshell V5.7.4  (abort with ^G)
1> leex:file(jscan), c(jscan).
{ok, jscan}
2> yecc:file(jparse), c(jparse).
{ok, jparse}
源代码可以从下载
阅读(2009) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~