diff options
author | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2007-09-18 20:07:13 +0000 |
---|---|---|
committer | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2007-09-18 20:07:13 +0000 |
commit | 88c137abe04fa46814d4f6b7a59d5e85f8ade603 (patch) | |
tree | 7550e5e6beaba498f0ed4d2bdac751d1c20a36c9 /packages | |
parent | 440070ebd42c240113dded40f87cee5e7e9907a0 (diff) | |
download | fpc-88c137abe04fa46814d4f6b7a59d5e85f8ade603.tar.gz |
* Added parser demo
* Removed debug statements from parser code
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@8556 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages')
-rw-r--r-- | packages/fcl-json/demo/parsedemo.lpi | 46 | ||||
-rw-r--r-- | packages/fcl-json/demo/parsedemo.pp | 123 | ||||
-rw-r--r-- | packages/fcl-json/src/jsonparser.pp | 2 |
3 files changed, 169 insertions, 2 deletions
diff --git a/packages/fcl-json/demo/parsedemo.lpi b/packages/fcl-json/demo/parsedemo.lpi new file mode 100644 index 0000000000..f341e42371 --- /dev/null +++ b/packages/fcl-json/demo/parsedemo.lpi @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <PathDelim Value="/"/> + <Version Value="5"/> + <General> + <SessionStorage Value="InProjectDir"/> + <MainUnit Value="0"/> + <TargetFileExt Value=""/> + </General> + <VersionInfo> + <ProjectVersion Value=""/> + </VersionInfo> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <Units Count="1"> + <Unit0> + <Filename Value="parsedemo.pp"/> + <IsPartOfProject Value="True"/> + <UnitName Value="parsedemo"/> + </Unit0> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="5"/> + <SearchPaths> + <OtherUnitFiles Value="../src/"/> + </SearchPaths> + <CodeGeneration> + <Generate Value="Faster"/> + </CodeGeneration> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> +</CONFIG> diff --git a/packages/fcl-json/demo/parsedemo.pp b/packages/fcl-json/demo/parsedemo.pp new file mode 100644 index 0000000000..19e389f40e --- /dev/null +++ b/packages/fcl-json/demo/parsedemo.pp @@ -0,0 +1,123 @@ +program parsedemo; + +{$mode objfpc}{$H+} + +uses + Classes, SysUtils, fpjson,jsonparser; + +Procedure DoParse(P : TJSONParser); + +Var + J : TJSONData; + +begin + Try + J:=P.Parse; + Try + Writeln('Parse succesful. Dumping JSON data : '); + If Assigned(J) then + begin + Writeln('Returned JSON structure has class : ',J.ClassName); + Writeln(J.AsJSON) + end + else + Writeln('No JSON data available'); + Finally + FreeAndNil(J); + end; + except + On E : Exception do + Writeln('An Exception occurred when parsing : ',E.Message); + end; +end; + + +Procedure ParseFile (FileName : String); + +Var + F : TFileStream; + P : TJSONParser; + +begin + F:=TFileStream.Create(FileName,fmopenRead); + try + // Create parser with Stream as source. + P:=TJSONParser.Create(F); + try + DoParse(P); + finally + FreeAndNil(P); + end; + finally + F.Destroy; + end; +end; + +Procedure ParseString(S : String); + +Var + P : TJSONParser; +begin + // Create parser with Stream as source. + P:=TJSONParser.Create(S); + try + DoParse(P); + finally + FreeAndNil(P); + end; +end; + +Procedure DefaultParsing; + +Const + // From JSON website + SAddr ='{ "addressbook": { "name": "Mary Lebow", '+ + ' "address": {'+ + ' "street": "5 Main Street",'+LineEnding+ + ' "city": "San Diego, CA",'+LineEnding+ + ' "zip": 91912,'+LineEnding+ + ' },'+LineEnding+ + ' "phoneNumbers": [ '+LineEnding+ + ' "619 332-3452",'+LineEnding+ + ' "664 223-4667"'+LineEnding+ + ' ]'+LineEnding+ + ' }'+LineEnding+ + '}'; + + +begin + ParseString(''); + ParseString('NULL'); + ParseString('1'); + ParseString('2.3'); + ParseString('True'); + ParseString('False'); + ParseString('"A string"'); + ParseString('[ Null, False, 1 , 2.3, "a" , { "b" : 1 }]'); + ParseString('{ "a" : 1, "b" : "Something" }'); + ParseString(SAddr); +end; + +Procedure Usage; + +begin + Writeln('Usage : parsedemo arg1 [arg2 [arg3 ...[argN]]]'); + Writeln(' ArgN can be the name of an existing file, or a JSON string'); +end; + +Var + I : Integer; + +begin + If (ParamCount=0) then + DefaultParsing + else if (ParamCount=1) and ((Paramstr(1)='-h') or (ParamStr(1)='--help')) then + Usage + else + For I:=1 to ParamCount do + If FileExists(Paramstr(i)) then + ParseFile(ParamStr(I)) + else + ParseString(Paramstr(I)); +end. + diff --git a/packages/fcl-json/src/jsonparser.pp b/packages/fcl-json/src/jsonparser.pp index 58564e72bb..dcf00df23c 100644 --- a/packages/fcl-json/src/jsonparser.pp +++ b/packages/fcl-json/src/jsonparser.pp @@ -164,7 +164,6 @@ begin T:=GetNextToken; If (T<>tkColon) then DoError(SErrExpectedColon); - Writeln('Getting element'); E:=DoParse(False,False); Result.Add(N,E); T:=GetNextToken; @@ -221,7 +220,6 @@ begin Repeat Result:=FScanner.FetchToken; Until (Result<>tkWhiteSpace); - Writeln('GetNextToken : ',CurrentTokenString); end; Procedure TJSONParser.DoError(Msg : String); |