Re: Checking scripts for syntax errors
- From: "Patrick Finnegan" <chppxf1@xxxxxxxxxxxxxxxxxxxxx>
- Date: Tue, 31 May 2005 14:29:40 GMT
"arthur" <arthurpaulh@xxxxxxxxx> wrote in message
news:1117545181.789947.50870@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> Hi,
>
>
> We have an application that executes Tcl scripts, some of them created
> by users. I tried to make a C code that checks these scripts to detect
> as many errors as possible, but I have some problems. Can someone help
> me with informations about how to find errors like the ones described
> below?
>
> My code looks like:
> /* compile Tcl script */
> CompileEnv compEnv;
> TclInitCompileEnv(interp, &compEnv, szTclCode, strlen(szTclCode));
> int result = TclCompileScript(interp, szTclCode, strlen(szTclCode), 0,
> &compEnv);
>
> /* if compilation failed, we have an error message */
> if (result != TCL_OK)
> ### error with interp->errorLine, Tcl_GetStringResult(interp)
>
>
> It seems this method does not detect errors in procedures (as in
> example 1) and several errors while matching brackets (as in example
> 3).
>
>
> Example 1:
>
> proc myProc { val } {
> if {val < 1}
> set x 0
> }
> }
> myProc 3
>
> no error is detected (should be "Variable references require preceding
> $" in expression "val < 1").
>
>
> Example 2:
>
> if {$val < 1}
> set x 0
> }
>
> the error is:
> wrong # args: no script following "{$val < 1}" argument
>
>
> Example 3:
>
> {
> if {$val < 1}
> set x 0
> }
>
> no error is detected, but when the script is evaluated, due to the
> extra bracket on line 1, the error is:
> invalid command name "
> if {$val < 1}
> set x 0
> "
>
>
> Another version for the C code, using Tcl_ParseCommand (but it works
> even worse - it didn't detect the error in Example 2 ):
>
> while (1)
> {
> int nRet = Tcl_ParseCommand(interp, szUnparsed, -1, 0, &parse);
> if (nRet == TCL_OK)
> {
> szUnparsed = (char*)(parse.commandStart + parse.commandSize);
> if (!*szUnparsed)
> break;
> }
> }
> else
> ###error with Tcl_GetStringResult(interp), szUnparsed
> }
>
>
>
> Thank you,
> Arthur
>
The ActiveState Tcl Dev Kit has a static syntax checker. It's commercial
but cheap as chips.
.
- References:
- Checking scripts for syntax errors
- From: arthur
- Checking scripts for syntax errors
- Prev by Date: Re: tdom in solaris activestate ?
- Next by Date: Problems with autoexpect
- Previous by thread: Checking scripts for syntax errors
- Next by thread: Problems with autoexpect
- Index(es):