错误:非法表达

时间:2014-07-01 16:57:31

标签: syntax-error pascal

我有这段代码:

tInteger :
   begin
       if(jinfo<maxinfo) then
        begin
          jinfo:=jinfo+1;
          lokasi[jinfo]:=ScanStr;
          WRITE(ResFile,jinfo:4);
        end;
        WRITE(ResFile,'   ');
        WRITE(ResFile,inum);
   end;`

   BEGIN
      ScanStr:='';
      REPEAT
           ScanStr:=ScanStr+cc;
           ReadChar;
      UNTIL NOT (cc in ['a'..'z','A'..'Z','0'..'9','_']);
      {Test KeyWord}
      TampStr:=UpperCase(ScanStr);
      i:=1; j:=JmlKeyWord; {index pencarian keyword dalam tabel}
      REPEAT
         k:=(i+j) DIV 2;
         IF TampStr<=KeyWord[k] THEN j:=k-1;
         IF TampStr>=KeyWord[k] THEN i:=k+1;
      UNTIL i>j;

      IF i-j>1 THEN
      BEGIN k:=k+ORD(tKurungTutup); Token := KeyToken; END
      ELSE
      BEGIN Token := tIdentifier;
      ScanStr:=COPY(ScanStr,1,10); END;
   end;

但脚本给了我这个错误:

error:illegal expression
error:ordinal expression expected
fatal: Syntax Error,: Expected but identifier SCANSTR found

我不明白这个错误信息。我确定这个剧本是对的。

1 个答案:

答案 0 :(得分:2)

&#34;脚本&#34; (这不是一个脚本 - 它的代码)是错误的。

您在case声明中:

tInteger :
   begin
       if(jinfo<maxinfo) then
       begin
         jinfo:=jinfo+1;
         lokasi[jinfo]:=ScanStr;
         WRITE(ResFile,jinfo:4);
       end;
       WRITE(ResFile,'   ');
       WRITE(ResFile,inum);
   end;

之后唯一有效的是另一个case分支,一个可选的else子句或一个最终的end

case TheThing of
  ThingA:
    begin
      // Code here
    end;
  ThingB:
    begin
      // Code here
    end;
else
    // Else code here
end;

你有另一个完整的begin..end块,这是无效的语法。

BEGIN
  ScanStr:='';
  REPEAT
       ScanStr:=ScanStr+cc;
       ReadChar;
  UNTIL NOT (cc in ['a'..'z','A'..'Z','0'..'9','_']);
  {Test KeyWord}
  TampStr:=UpperCase(ScanStr);
  i:=1; j:=JmlKeyWord; {index pencarian keyword dalam tabel}
  REPEAT
     k:=(i+j) DIV 2;
     IF TampStr<=KeyWord[k] THEN j:=k-1;
     IF TampStr>=KeyWord[k] THEN i:=k+1;
  UNTIL i>j;

  IF i-j>1 THEN
  BEGIN k:=k+ORD(tKurungTutup); Token := KeyToken; END
  ELSE
  BEGIN Token := tIdentifier;
  ScanStr:=COPY(ScanStr,1,10); END;
end;