## Tcl9.0.3/Tk9.0.3 Documentation > Tcl C API > ParseCmd

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, Tcl_ParseVarName, Tcl_ParseVar, Tcl_FreeParse, Tcl_EvalTokensStandard — Tcl 記述譜と式を構文解析する　 parse Tcl scripts and expressions
  SYNOPSIS
    #include <tcl.h>
    int
    Tcl_ParseCommand(interp, start, numBytes, nested, parsePtr)
    int
    Tcl_ParseExpr(interp, start, numBytes, parsePtr)
    int
    Tcl_ParseBraces(interp, start, numBytes, parsePtr, append, termPtr)
    int
    Tcl_ParseQuotedString(interp, start, numBytes, parsePtr, append, termPtr)
    int
    Tcl_ParseVarName(interp, start, numBytes, parsePtr, append)
    const char *
    Tcl_ParseVar(interp, start, termPtr)
    Tcl_FreeParse(usedParsePtr)
    int
    Tcl_EvalTokensStandard(interp, tokenPtr, numTokens)
  引数 ARGUMENTS
    Tcl_Interp *interp (out)
    const char *start (入力in)
    Tcl_Size numBytes (入力in)
    int nested (入力in)
    int append (入力in)
    Tcl_Parse *parsePtr (出力out)
    const char **termPtr (出力out)
    Tcl_Parse *usedParsePtr (入力in)
  説明 DESCRIPTION
  TCL_PARSE STRUCTURE
    TCL_TOKEN_WORD
    TCL_TOKEN_SIMPLE_WORD
    TCL_TOKEN_EXPAND_WORD
    TCL_TOKEN_TEXT
    TCL_TOKEN_BS
    TCL_TOKEN_COMMAND
    TCL_TOKEN_VARIABLE
    TCL_TOKEN_SUB_EXPR
    TCL_TOKEN_OPERATOR
  KEYWORDS

### NAME

Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, Tcl_ParseVarName, Tcl_ParseVar, Tcl_FreeParse, Tcl_EvalTokensStandard — Tcl 記述譜と式を構文解析する　 parse Tcl scripts and expressions

### SYNOPSIS

#include <tcl.h>
int
Tcl_ParseCommand(interp, start, numBytes, nested, parsePtr)
int
Tcl_ParseExpr(interp, start, numBytes, parsePtr)
int
Tcl_ParseBraces(interp, start, numBytes, parsePtr, append, termPtr)
int
Tcl_ParseQuotedString(interp, start, numBytes, parsePtr, append, termPtr)
int
Tcl_ParseVarName(interp, start, numBytes, parsePtr, append)
const char *
Tcl_ParseVar(interp, start, termPtr)
Tcl_FreeParse(usedParsePtr)
int
Tcl_EvalTokensStandard(interp, tokenPtr, numTokens)

### 引数 ARGUMENTS

Tcl_Interp *interp (out)
  Tcl_FreeParse と Tcl_EvalTokensStandard 以外については､不都合報告の為のみに使われる; NULL の場合､不都合の後に不都合伝言文は残らない｡ Tcl_EvalTokensStandard については､記述譜の評価の為の文脈を定め､不都合報告にも使われる; NULL であってはならない｡　 For procedures other than Tcl_FreeParse and Tcl_EvalTokensStandard, used only for error reporting; if NULL, then no error messages are left after errors. For Tcl_EvalTokensStandard, determines the context for evaluating the script and also is used for error reporting; must not be NULL.

const char *start (入力in)
  構文解析すべき文字列内の最初の文字への指示子｡　 Pointer to first character in string to parse.

Tcl_Size numBytes (入力in)
  構文解析すべき文字列内のバイトの個数､どの終端の零文字も含まない｡もし 0 より少ないと､記述譜は最初から最初の零文字迄の全ての文字を含む｡　 Number of bytes in string to parse, not including any terminating null character. If less than 0 then the script consists of all characters following start up to the first null character.

int nested (入力in)
  非零の場合､記述譜は命令置換の部分であって､引用符号の付かない右角括弧は命令の終りとして扱われる､ことを意味する｡もし零なら､右角括弧は特別の意味を持たない｡　 Non-zero means that the script is part of a command substitution so an unquoted close bracket should be treated as a command terminator. If zero, close brackets have no special meaning.

int append (入力in)
  非零の場合､ *parsePtr は既に適正な字句を含んでいる; 新しい字句は､既に存在するこれらに追記されるべきであることを意味する｡零の場合､ *parsePtr は初期化されていないことを意味する; その中のどのような情報も無視される｡この引数は通常は 0 である｡　 Non-zero means that *parsePtr already contains valid tokens; the new tokens should be appended to those already present. Zero means that *parsePtr is uninitialized; any information in it is ignored. This argument is normally 0.

Tcl_Parse *parsePtr (出力out)
  構文解析された命令､式､変数名､等に関する情報が詰まった構造を指す｡ Tcl_ParseBraces か Tcl_ParseQuotedString か Tcl_ParseVarName への呼出しの追記が非零でない限り､この構造内のどのような事前の情報も無視される｡　 Points to structure to fill in with information about the parsed command, expression, variable name, etc. Any previous information in this structure is ignored, unless append is non-zero in a call to Tcl_ParseBraces, Tcl_ParseQuotedString, or Tcl_ParseVarName.

const char **termPtr (出力out)
  NULL でない場合､字句構文解析が成功であると､ Tcl_ParseBraces と Tcl_ParseQuotedString と Tcl_ParseVar が終端文字の直後の文字(右角括弧か､変数の最後の文字か､(対応する)引用符か)への指示子を保存することになる場所を指す｡　 If not NULL, points to a location where Tcl_ParseBraces, Tcl_ParseQuotedString, and Tcl_ParseVar will store a pointer to the character just after the terminating character (the close-brace, the last character of the variable name, or the close-quote (respectively)) if the parse was successful.

Tcl_Parse *usedParsePtr (入力in)
  Tcl_ParseCommand や Tcl_ParseExpr や Tcl_ParseVarName 等への事前の呼出しによって満たされた構造を指す｡　 Points to structure that was filled in by a previous call to Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseVarName, etc.

### 説明 DESCRIPTION

これらの手続函数は､ Tcl 命令又は､式や変数参照の様な Tcl 命令の部分を解析する｡夫々の手続函数は記述譜(又はその部分)へのポインターを取り､ parsePtr により指される構造に分解された情報を記述する字句の集まりを詰める｡手続函数は通常 TCL_OK を返す｡但し不都合が生じると TCL_ERROR を返し､不都合伝言文を解釈実行機能の結果に残し(解釈実行機能が NULL でない時)､ parsePtr 内には何も残さない｡ These procedures parse Tcl commands or portions of Tcl commands such as expressions or references to variables. Each procedure takes a pointer to a script (or portion thereof) and fills in the structure pointed to by parsePtr with a collection of tokens describing the information that was parsed. The procedures normally return TCL_OK. However, if an error occurs then they return TCL_ERROR, leave an error message in interp's result (if interp is not NULL), and leave nothing in parsePtr.

Tcl_ParseCommand は Tcl 記述譜を解析する手続函数である｡記述譜へのポインターが与えられ､記述譜から最初の命令を解析する｡もし命令が成功裏に解析されると､ Tcl_ParseCommand は TCL_OK を返し､ parsePtr によって指される構造に命令の構造に関する情報を詰める(詳細は下を参照されたい)｡もし命令の解析内で不都合が生じると､ TCL_ERROR が返され､不都合伝言文を解釈実行機能の結果に残し､ *parsePtr の箇所には情報を残さない｡ Tcl_ParseCommand is a procedure that parses Tcl scripts. Given a pointer to a script, it parses the first command from the script. If the command was parsed successfully, Tcl_ParseCommand returns TCL_OK and fills in the structure pointed to by parsePtr with information about the structure of the command (see below for details). If an error occurred in parsing the command then TCL_ERROR is returned, an error message is left in interp's result, and no information is left at *parsePtr.

Tcl_ParseExpr は Tcl の式を解析する｡記述譜へのポインターが与えられ､ Tcl_ParseExpr は式を解析する｡もし式が成功裏に解析されると､ Tcl_ParseExpr は TCL_OK を返し､ parsePtr によって指される構造に式の構造に関する情報を詰める(詳細は下を参照されたい)｡もし命令の解析内で不都合が生じると､ TCL_ERROR が返され､不都合伝言文が解釈実行機能の結果に残され､ *parsePtr の箇所には情報を残さない｡ Tcl_ParseExpr parses Tcl expressions. Given a pointer to a script containing an expression, Tcl_ParseExpr parses the expression. If the expression was parsed successfully, Tcl_ParseExpr returns TCL_OK and fills in the structure pointed to by parsePtr with information about the structure of the expression (see below for details). If an error occurred in parsing the command then TCL_ERROR is returned, an error message is left in interp's result, and no information is left at *parsePtr.

Tcl_ParseBraces はその引数 start の初めから､ {hello} や {string \t with \t tabs} の様な波括弧内に括られた文字列や命令引数を解析する｡ start の最初の文字は { でなければならない｡波括弧で括られた文字列が成功裏に解析されると､ Tcl_ParseBraces は TCL_OK を返し､ parsePtr によって指される構造に文字列の構造に関する情報を詰め(詳細は下を参照されたい)､ *termPtr によって与えられる箇所に終了した } の文字の後のポインターを保存する｡もし命令の解析内で不都合が生じると､ TCL_ERROR が返され､不都合伝言文が解釈実行機能の結果に残され､ *parsePtr や *termPtr の箇所には情報を何も残さない｡ Tcl_ParseBraces parses a string or command argument enclosed in braces such as {hello} or {string \t with \t tabs} from the beginning of its argument start. The first character of start must be {. If the braced string was parsed successfully, Tcl_ParseBraces returns TCL_OK, fills in the structure pointed to by parsePtr with information about the structure of the string (see below for details), and stores a pointer to the character just after the terminating } in the location given by *termPtr. If an error occurs while parsing the string then TCL_ERROR is returned, an error message is left in interp's result, and no information is left at *parsePtr or *termPtr.

Tcl_ParseQuotedString はその引数 start の初めから､ "sum is [expr {$a+$b}]" の様な二重引数に括られた文字列を解析する｡ start の最初の文字は " でなければならない｡二重引数に括られた文字列が成功裏に解析されると､ Tcl_ParseQuotedString は TCL_OK を返し､ parsePtr によって指される構造に文字列の構造に関する情報を詰め(詳細は下を参照されたい)､ *termPtr によって与えられる箇所に終了した " の文字の後のポインターを保存する｡もし命令の解析内で不都合が生じると､ TCL_ERROR が返され､不都合伝言文が解釈実行機能の結果に残され､ *parsePtr や *termPtr の箇所には情報を何も残さない｡ Tcl_ParseQuotedString parses a double-quoted string such as "sum is [expr {$a+$b}]" from the beginning of the argument start. The first character of start must be ". If the double-quoted string was parsed successfully, Tcl_ParseQuotedString returns TCL_OK, fills in the structure pointed to by parsePtr with information about the structure of the string (see below for details), and stores a pointer to the character just after the terminating " in the location given by *termPtr. If an error occurs while parsing the string then TCL_ERROR is returned, an error message is left in interp's result, and no information is left at *parsePtr or *termPtr.

Tcl_ParseVarName はその引数 start.の初めから､ $abc や $x([expr {$index + 1}]) の様な Tcl 変数参照を解析する｡ start の最初の文字は $ でなければならない｡変数名が成功裡に解析されると､ Tcl_ParseVarName は TCL_OK を返し､ parsePtr によって指される構造に変数名の構造に関する情報を詰める(詳細は下を参照されたい)｡もし命令の解析内で不都合が生じると､ TCL_ERROR が返され､不都合伝言文が(interp が NULL でないなら)解釈実行機能interpの結果に残され､ *parsePtr の箇所には情報を何も残さない｡ Tcl_ParseVarName parses a Tcl variable reference such as $abc or $x([expr {$index + 1}]) from the beginning of its start argument. The first character of start must be $. If a variable name was parsed successfully, Tcl_ParseVarName returns TCL_OK and fills in the structure pointed to by parsePtr with information about the structure of the variable name (see below for details). If an error occurs while parsing the command then TCL_ERROR is returned, an error message is left in interp's result (if interp is not NULL), and no information is left at *parsePtr.

Tcl_ParseVar はその引数 start の初めから､ $abc や $x([expr {$index + 1}]) の様な Tcl 変数参照を解析する｡ start の最初の文字は $ でなければならない｡変数名が成功裡に解析されると､ Tcl_ParseVar はポインターを変数の文字列値に返す｡もし命令の解析内で不都合が生じると､ NULL が返され､不都合伝言文が解釈実行機能interpの結果に残される｡ Tcl_ParseVar parses a Tcl variable reference such as $abc or $x([expr {$index + 1}]) from the beginning of its start argument. The first character of start must be $. If the variable name is parsed successfully, Tcl_ParseVar returns a pointer to the string value of the variable. If an error occurs while parsing, then NULL is returned and an error message is left in interp's result.

Tcl_ParseCommand と Tcl_ParseExpr と Tcl_ParseBraces と Tcl_ParseQuotedString と Tcl_ParseVarName によって *parsePtr の箇所に残された情報は動的に割当てられた記憶を含むかもしれない｡もしこの５つの解析手続函数が TCL_OK を返す場合､呼出し側は *parsePtr の箇所の記憶を開放する為に Tcl_FreeParse を呼ばなくてはならない｡これらの手続函数はどの様な *parsePtr 内の既存の情報も無視する( append が非零でない限り)ので､これらの内のどれかが繰返し呼出しをなす場合､夫々の呼出しの度に Tcl_FreeParseR が起動されなければならない｡ The information left at *parsePtr by Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, and Tcl_ParseVarName may include dynamically allocated memory. If these five parsing procedures return TCL_OK then the caller must invoke Tcl_FreeParse to release the storage at *parsePtr. These procedures ignore any existing information in *parsePtr (unless append is non-zero), so if repeated calls are being made to any of them then Tcl_FreeParse must be invoked once after each call.

Tcl_EvalTokensStandard は Tcl_Parse 構造から字句解析の並びを評価する｡字句は典型的には､語又は字句内の全ての字句から構成され､それは配列変数への参照の為の索引を作り上げる｡ Tcl_EvalTokensStandard は字句に要求される置換を遂行し､結果の値を結合する｡そして Tcl_EvalTokensStandard からの返り値は､次の Tcl 完成符号の内の一つである､ TCL_OK か TCL_ERROR か TCL_RETURN か TCL_BREAK か TCL_CONTINUE 又は､拡張内で始められた何かの他の整数値かもしれない｡更に､結果の値か不都合伝言文が解釈実行機能の結果に残され; それは Tcl_GetObjResult を使って取戻すことができる｡ Tcl_EvalTokensStandard evaluates a sequence of parse tokens from a Tcl_Parse structure. The tokens typically consist of all the tokens in a word or all the tokens that make up the index for a reference to an array variable. Tcl_EvalTokensStandard performs the substitutions requested by the tokens and concatenates the resulting values. The return value from Tcl_EvalTokensStandard is a Tcl completion code with one of the values TCL_OK, TCL_ERROR, TCL_RETURN, TCL_BREAK, or TCL_CONTINUE, or possibly some other integer value originating in an extension. In addition, a result value or error message is left in interp's result; it can be retrieved using Tcl_GetObjResult.

### TCL_PARSE STRUCTURE

Tcl_ParseCommand と Tcl_ParseExpr と Tcl_ParseBraces と Tcl_ParseQuotedString と Tcl_ParseVarName は二つのデータ構造の解析情報を返す､ Tcl_Parse とTcl_Token である: Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, and Tcl_ParseVarName return parse information in two data structures, Tcl_Parse and Tcl_Token:

    typedef struct {
        const char *commentStart;
        Tcl_Size commentSize;
        const char *commandStart;
        Tcl_Size commandSize;
        Tcl_Size numWords;
        Tcl_Token *tokenPtr;
        Tcl_Size numTokens;
        ...
    } Tcl_Parse;

    typedef struct {
        int type;
        const char *start;
        Tcl_Size size;
        Tcl_Size numComponents;
    } Tcl_Token;

Tcl_Parse 構造の最初の五つの欄は Tcl_ParseCommand によってのみ満たされる｡これらの欄は他の解析手続函数には使われない｡ The first five fields of a Tcl_Parse structure are filled in only by Tcl_ParseCommand. These fields are not used by the other parsing procedures.

Tcl_ParseCommand は Tcl_Parse 構造内に一つの Tcl 命令と何かの命令に先立つ注釈を記述する情報を満たす｡もし注釈がある場合､ commentStart 欄は最初の注釈の始まりの # 文字を指し､ commentSize は命令に先立つ注釈内の最後の注釈を終了させる行替え文字を含む全てのバイトの数を指し示す｡命令に先立つなんの注釈もない場合､ commentSize は 0 である｡ Tcl_ParseCommand は又､ commandStart 欄を､命令内の(どの注釈や先頭の空白も跳ばす)最初の語の最初の文字を指すよう設定し､ commandSize は命令内のバイトの総個数を与えそれは commandStart により指される文字を含み､命令を終らせる行替え､右角括弧､セミコロン文字迄を含む｡ numWords 欄は命令内の語の総数を与える｡ Tcl_ParseCommand fills in a Tcl_Parse structure with information that describes one Tcl command and any comments that precede the command. If there are comments, the commentStart field points to the # character that begins the first comment and commentSize indicates the number of bytes in all of the comments preceding the command, including the newline character that terminates the last comment. If the command is not preceded by any comments, commentSize is 0. Tcl_ParseCommand also sets the commandStart field to point to the first character of the first word in the command (skipping any comments and leading space) and commandSize gives the total number of bytes in the command, including the character pointed to by commandStart up to and including the newline, close bracket, or semicolon character that terminates the command. The numWords field gives the total number of words in the command.

全ての解析手続函数は残りの欄と tokenPtr と numTokens を設定する｡ tokenPtr 欄は Tcl_Token 構造の配列の最初を指す､その構造は解析される見出しの要素を記述する｡ numTokens 欄は配列内に存在する字句の総数を与える｡夫々の字句は四つの欄を含む｡ type 欄は下に記述された､幾つかの字句の型の内の一つを選択する｡ start 欄は字句内の最初の文字を指し､ size 欄は字句内の文字の総数を与える｡幾つかの字句の型､譬えば TCL_TOKEN_WORD と TCL_TOKEN_VARIABLE は幾つかの字句部品から構成される､それは直ぐに親の字句に続く; numComponents 欄はこれ等が幾つあるかを記述する｡ type 欄は次の値の内の一つを有する: All parsing procedures set the remaining fields, tokenPtr and numTokens. The tokenPtr field points to the first in an array of Tcl_Token structures that describe the components of the entity being parsed. The numTokens field gives the total number of tokens present in the array. Each token contains four fields. The type field selects one of several token types that are described below. The start field points to the first character in the token and the size field gives the total number of characters in the token. Some token types, such as TCL_TOKEN_WORD and TCL_TOKEN_VARIABLE, consist of several component tokens, which immediately follow the parent token; the numComponents field describes how many of these there are. The type field has one of the following values:

TCL_TOKEN_WORD
  この字句は通常命令の一つの語を記述するが､それは式の中の引用された又は波括弧で括られた文字列を記述する｡字句は記述譜の部品を記述する､それはそれぞれは区切られた仔字句によって記述される小部品の並びを連結した結果である｡字句は部品の最初の非空白文字で始まり(二重引用か左波括弧かもしれない)､部品を終らせる空白､セミコロン､右角括弧､引用の終わり､右波括弧の手前迄の全ての文字を含む｡ numComponents は語を作り上げる部分字句の総数を計測する､それらは TCL_TOKEN_VARIABLE と TCL_TOKEN_BS 字句の仔字句を含む｡ This token ordinarily describes one word of a command but it may also describe a quoted or braced string in an expression. The token describes a component of the script that is the result of concatenating together a sequence of subcomponents, each described by a separate subtoken. The token starts with the first non-blank character of the component (which may be a double-quote or open brace) and includes all characters in the component up to but not including the space, semicolon, close bracket, close quote, or close brace that terminates the component. The numComponents field counts the total number of sub-tokens that make up the word, including sub-tokens of TCL_TOKEN_VARIABLE and TCL_TOKEN_BS tokens.

TCL_TOKEN_SIMPLE_WORD
  この字句は TCL_TOKEN_WORD と同じ意味を有するが､語が一つの TCL_TOKEN_TEXT 仔字句から成り立つ事を保障することが異なる｡ numComponents 欄は常に 1.である｡ This token has the same meaning as TCL_TOKEN_WORD, except that the word is guaranteed to consist of a single TCL_TOKEN_TEXT sub-token. The numComponents field is always 1.

TCL_TOKEN_EXPAND_WORD
  この字句は TCL_TOKEN_WORD と同じ意味を有するが､置換の後で､命令評価内で多重引数を形成するために拡張されるべきこの語のリスト値を指し示す拡張接頭辞 {*} を命令解析譜が註意していることが異なる｡この字句型は Tcl_ParseCommand.によってのみ作成される｡ This token has the same meaning as TCL_TOKEN_WORD, except that the command parser notes this word began with the expansion prefix {*}, indicating that after substitution, the list value of this word should be expanded to form multiple arguments in command evaluation. This token type can only be created by Tcl_ParseCommand.

TCL_TOKEN_TEXT
  この字句は語の部分である文字文書の範囲を記述する｡ numComponents 欄は常に 0 である｡ The token describes a range of literal text that is part of a word. The numComponents field is always 0.

TCL_TOKEN_BS
  \n や \0xa3 の様な逆斜線並びを記述する字句｡ numComponents 欄は常に 0 である｡ The token describes a backslash sequence such as \n or \0xA3. The numComponents field is always 0.

TCL_TOKEN_COMMAND
  その結果が語に置換されるべき命令を記述する字句｡この字句は命令を括る四角の角括弧が含まれる｡ numComponents 欄は常に 0 である(入れ子になった命令は解析されない; その字句を得たい場合は Tcl_ParseCommand を再起的に呼出す)｡ The token describes a command whose result must be substituted into the word. The token includes the square brackets that surround the command. The numComponents field is always 0 (the nested command is not parsed; call Tcl_ParseCommand recursively if you want to see its tokens).

TCL_TOKEN_VARIABLE
  この字句は変数置換を記述する､ $ と 変数名 と 配列の索引(もしあれば)と 索引が終了する右丸括弧迄 とを含む｡この字句には一つ或はそれ以上の､変数名と配列索引を記述する追加的字句が続く｡もし numComponents が 1 の場合､変数は単純変数であり次の字句は TCL_TOKEN_TEXT 字句であって変数の名前を与える｡もし numComponents が１より大きい場合､変数は配列である: 最初の仔字句は配列名を与える TCL_TOKEN_TEXT 字句であり残りの仔字句は TCL_TOKEN_TEXT と TCL_TOKEN_BS と TCL_TOKEN_COMMAND と TCL_TOKEN_VARIABLE 字句であり､連結して配列の索引を生成しなければならない｡ numComponents 欄は入れ子になった仔字句を含み､それは配列索引内の TCL_TOKEN_VARIABLE 字句の部分である｡ The token describes a variable substitution, including the $, variable name, and array index (if there is one) up through the close parenthesis that terminates the index. This token is followed by one or more additional tokens that describe the variable name and array index. If numComponents is 1 then the variable is a scalar and the next token is a TCL_TOKEN_TEXT token that gives the variable name. If numComponents is greater than 1 then the variable is an array: the first sub-token is a TCL_TOKEN_TEXT token giving the array name and the remaining sub-tokens are TCL_TOKEN_TEXT, TCL_TOKEN_BS, TCL_TOKEN_COMMAND, and TCL_TOKEN_VARIABLE tokens that must be concatenated to produce the array index. The numComponents field includes nested sub-tokens that are part of TCL_TOKEN_VARIABLE tokens in the array index.

TCL_TOKEN_SUB_EXPR
  式の一つの子供(又は式全体)の式を記述する字句｡子供の式は整数文字､変数置換､括弧で括った子供の式の様な値で構成される; それは又､演算子と被演算子から構成される｡その字句は最初の仔式の非空白文字から仔式を終らせる空白､波括弧､右丸括弧､右角括弧文字の手前までである｡この字句は一つ或はそれ以上の仔式を記述する追加的字句が続く｡もし TCL_TOKEN_SUB_EXPR 字句の後の最初の仔字句が TCL_TOKEN_OPERATOR 字句の場合､仔の式は演算子とその字句被演算子から構成される｡もし演算子が被演算子を持たない場合､その仔式は TCL_TOKEN_OPERATOR 字句.から構成される｡それぞれの被演算子は TCL_TOKEN_WORD と TCL_TOKEN_TEXT と TCL_TOKEN_BS と TCL_TOKEN_COMMAND と TCL_TOKEN_VARIABLER と TCL_TOKEN_SUB_EXPR の内の一つの字句によって記述される値である｡ numComponents 欄は部分式を作り上げる仔字句の総数を計数する; それはどの入れ子の TCL_TOKEN_SUB_EXPR 字句の為の仔字句も含む｡ The token describes one subexpression of an expression (or an entire expression). A subexpression may consist of a value such as an integer literal, variable substitution, or parenthesized subexpression; it may also consist of an operator and its operands. The token starts with the first non-blank character of the subexpression up to but not including the space, brace, close-paren, or bracket that terminates the subexpression. This token is followed by one or more additional tokens that describe the subexpression. If the first sub-token after the TCL_TOKEN_SUB_EXPR token is a TCL_TOKEN_OPERATOR token, the subexpression consists of an operator and its token operands. If the operator has no operands, the subexpression consists of just the TCL_TOKEN_OPERATOR token. Each operand is described by a TCL_TOKEN_SUB_EXPR token. Otherwise, the subexpression is a value described by one of the token types TCL_TOKEN_WORD, TCL_TOKEN_TEXT, TCL_TOKEN_BS, TCL_TOKEN_COMMAND, TCL_TOKEN_VARIABLE, and TCL_TOKEN_SUB_EXPR. The numComponents field counts the total number of sub-tokens that make up the subexpression; this includes the sub-tokens for any nested TCL_TOKEN_SUB_EXPR tokens.

TCL_TOKEN_OPERATOR
  この字句は && や hypot の様な式の１個の演算子を記述する｡ TCL_TOKEN_OPERATOR 字句は､演算子とその被演算子を記述する TCL_TOKEN_SUB_EXPR 字句が常に前置きされる; TCL_TOKEN_SUB_EXPR 字句の numComponents 欄は被演算子の個数を定める為に使うことができる｡ * の様な二項演算子はその被演算子を記述する二つの TCL_TOKEN_SUB_EXPR 字句が続く｡ - の様な単項演算子にはその被演算子の１つの TCL_TOKEN_SUB_EXPR 字句が続く｡もし演算子が log10 の様な数学函数に合致する場合 TCL_TOKEN_OPERATOR 字句がその品目の名前を与え､引続く TCL_TOKEN_SUB_EXPR 字句がその被演算子を記述する; もし被演算子がない場合( rand の如く)､ TCL_TOKEN_SUB_EXPR 字句は添加されない｡三項演算子が一種類あり､x?y:z の様な if-then-else 部分式の中に現れる ? 演算子である; この場合､ ? TCL_TOKEN_OPERATOR 字句には被演算子 x と y と z に関する三つの TCL_TOKEN_SUB_EXPR 字句が続く｡ TCL_TOKEN_OPERATOR 字句に関する numComponents 欄は常に 0 である｡ The token describes one operator of an expression such as && or hypot. A TCL_TOKEN_OPERATOR token is always preceded by a TCL_TOKEN_SUB_EXPR token that describes the operator and its operands; the TCL_TOKEN_SUB_EXPR token's numComponents field can be used to determine the number of operands. A binary operator such as * is followed by two TCL_TOKEN_SUB_EXPR tokens that describe its operands. A unary operator like - is followed by a single TCL_TOKEN_SUB_EXPR token for its operand. If the operator is a math function such as log10, the TCL_TOKEN_OPERATOR token will give its name and the following TCL_TOKEN_SUB_EXPR tokens will describe its operands; if there are no operands (as with rand), no TCL_TOKEN_SUB_EXPR tokens follow. There is one trinary operator, ?, that appears in if-then-else subexpressions such as x?y:z; in this case, the ? TCL_TOKEN_OPERATOR token is followed by three TCL_TOKEN_SUB_EXPR tokens for the operands x, y, and z. The numComponents field for a TCL_TOKEN_OPERATOR token is always 0.

Tcl_ParseCommand から返った後､ Tcl_Parse の tokenPtr 欄によって指される初めの字句は､常に型 TCL_TOKEN_WORD か TCL_TOKEN_SIMPLE_WORD か TCL_TOKEN_EXPAND_WORDを有す｡それには仔字句が続く､それはその語を産出する為に連結する筈である｡続きの字句は TCL_TOKEN_WORD であるか､又は､TCL_TOKEN_EXPAND_WORD 字句の TCL_TOKEN_SIMPLE_WORD で第二の語としてその語の為の仔字句が続き､更に全ての numWords が勘定されるまで続いている｡ After Tcl_ParseCommand returns, the first token pointed to by the tokenPtr field of the Tcl_Parse structure always has type TCL_TOKEN_WORD or TCL_TOKEN_SIMPLE_WORD or TCL_TOKEN_EXPAND_WORD. It is followed by the sub-tokens that must be concatenated to produce the value of that word. The next token is the TCL_TOKEN_WORD or TCL_TOKEN_SIMPLE_WORD of TCL_TOKEN_EXPAND_WORD token for the second word, followed by sub-tokens for that word, and so on until all numWords have been accounted for.

Tcl_ParseExpr から帰った後､ Tcl_Parse 構造の tokenPtr 欄によって指される第１の字句は常に型 TCL_TOKEN_SUB_EXPR を有する｡それは式の値を産出する為に評価されなければならない仔字句が続く｡ Tcl_Parse 構造内の字句情報のみが修正される: commentStart, commentSize と After Tcl_ParseExpr returns, the first token pointed to by the tokenPtr field of the Tcl_Parse structure always has type TCL_TOKEN_SUB_EXPR. It is followed by the sub-tokens that must be evaluated to produce the value of the expression. Only the token information in the Tcl_Parse structure is modified: the commentStart, commentSize, commandStart, and commandSize fields are not modified by Tcl_ParseExpr.

Tcl_ParseBraces から帰った後､Tcl_Parse 構造の tokenPtr 欄に指された字句の配列は､もし波括弧で括られた文字列が何も逆斜線改行を含まない場合､１つの TCL_TOKEN_TEXT 字句を含む｡もし文字列が逆斜線改行を含む場合､字句の配列は一つ或はそれ以上の TCL_TOKEN_TEXT か TCL_TOKEN_BS 副字句を含み､それは文字列の値を産出するために連結しなくてはならない｡もし波括弧で括られた字句が丁度 {} であると(即ち､文字列は空である)､一つの TCL_TOKEN_TEXT 字句は零を含む寸法欄を有すことになる; これは､少なくとも､波括弧文字列を記述する一つの字句があることを保証する｡ Tcl_Parse 内の字句のみが修正される: commentStart と commentSize と commandStart と commandSize 欄は Tcl_ParseBraces によって修正される事はない｡ After Tcl_ParseBraces returns, the array of tokens pointed to by the tokenPtr field of the Tcl_Parse structure will contain a single TCL_TOKEN_TEXT token if the braced string does not contain any backslash-newlines. If the string does contain backslash-newlines, the array of tokens will contain one or more TCL_TOKEN_TEXT or TCL_TOKEN_BS sub-tokens that must be concatenated to produce the value of the string. If the braced string was just {} (that is, the string was empty), the single TCL_TOKEN_TEXT token will have a size field containing zero; this ensures that at least one token appears to describe the braced string. Only the token information in the Tcl_Parse structure is modified: the commentStart, commentSize, commandStart, and commandSize fields are not modified by Tcl_ParseBraces.

Tcl_ParseQuotedString から帰った後､引用された文字列の内用に依存した Tcl_Parse 構造の tokenPtr 欄に指された字句の配列が返される｡それは一つ或はそれ以上の TCL_TOKEN_TEXT と TCL_TOKEN_BS と TCL_TOKEN_COMMAND と TCL_TOKEN_VARIABLE 仔字句から構成される｡配列は少なくとも一つの字句を含む; 譬えば､もし引数 start が空の場合､返される配列は､零寸法欄を伴う一つの TCL_TOKEN_TEXT 字句から構成される｡ Tcl_Parse 内の字句のみが修正される: commentStart と commentSize と commandStart と commandSize 欄は修正される事はない｡ After Tcl_ParseQuotedString returns, the array of tokens pointed to by the tokenPtr field of the Tcl_Parse structure depends on the contents of the quoted string. It will consist of one or more TCL_TOKEN_TEXT, TCL_TOKEN_BS, TCL_TOKEN_COMMAND, and TCL_TOKEN_VARIABLE sub-tokens. The array always contains at least one token; for example, if the argument start is empty, the array returned consists of a single TCL_TOKEN_TEXT token with a zero size field. Only the token information in the Tcl_Parse structure is modified: the commentStart, commentSize, commandStart, and commandSize fields are not modified.

Tcl_ParseVarName から返った後､ Tcl_Parse 構造の tokenPtr 欄に指されている第１の字句は常に型 TCL_TOKEN_VARIABLE を有する｡それに上の様に記述された変数名を作り上げる仔字句が続く｡変数の名前の総合長さは最初の字句の寸法欄に含まれる｡ Tcl_ParseExpr の項の様に､ Tcl_Parse 内の字句情報のみが Tcl_ParseVarName によって修正される: commentStart と commentSize と commandStart と commandSize 欄は修正されない｡ After Tcl_ParseVarName returns, the first token pointed to by the tokenPtr field of the Tcl_Parse structure always has type TCL_TOKEN_VARIABLE. It is followed by the sub-tokens that make up the variable name as described above. The total length of the variable name is contained in the size field of the first token. As in Tcl_ParseExpr, only the token information in the Tcl_Parse structure is modified by Tcl_ParseVarName: the commentStart, commentSize, commandStart, and commandSize fields are not modified.

Tcl_Parse と Tcl_Token 構造内の全ての文字ポインターは､ Tcl_ParseCommand と Tcl_ParseExpr と Tcl_ParseBraces と Tcl_ParseQuotedString と Tcl_ParseVarName に渡された start 引数内の文字を参照している｡ All of the character pointers in the Tcl_Parse and Tcl_Token structures refer to characters in the start argument passed to Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, and Tcl_ParseVarName.

Tcl_Parse 構造内には numTokens 欄のあとに追加的な欄があるが､これ等は Tcl_ParseCommand と Tcl_ParseExpr と Tcl_ParseBraces と Tcl_ParseQuotedString と Tcl_ParseVarName の私的な用法である; それらはこれ等手続函数の外では､符号命令に参照されない｡ There are additional fields in the Tcl_Parse structure after the numTokens field, but these are for the private use of Tcl_ParseCommand, Tcl_ParseExpr, Tcl_ParseBraces, Tcl_ParseQuotedString, and Tcl_ParseVarName; they should not be referenced by code outside of these procedures.

### KEYWORDS

backslash substitution, braces, command, expression, parse, token, variable substitution
Copyright © 1997 Sun Microsystems, Inc.