Pascal(免费或Turbo)阅读


v-star*위위
2025-03-16 12:19:47 (6天前)
  1. 我试图理解在Free Pascal中看到的一种神奇的行为,在Linux下以Turbo模式(特别是fpc -Mtp -vw)编译。代码来自Jack Crenshaw的“Let's Build a Compiler”,...

3 条回复
  1. 0# 咿呀哟 | 2019-08-31 10-32



    Pascal Read,写例程是神奇的。 IOW它不是某个库中存在的真实函数,但编译器会生成一系列对运行时的调用。该系列包括read,readln,write和writeln,以及扩展的Pascal

    readstr



    writestr

    这是“来自字符串”的读写版本。



    调用根据参数的类型而有所不同,如果它们有额外的参数(例如,写入:整数的x格式化值和:对于实数的x:y):




    1. writeln(x:10:5);

    2. </code>


    在Free Pascal中,与Turbo Pascal和Delphi相反,一些类似RTTI的功能也暴露出来,例如writeln()一个enum类型的变量,将枚举的值打印为identifer(string)。



    错误处理和格式化有些限制,因此它们的使用会随着问题的复杂性而变化



    至于你的观察,你的getchar like调用可能读取char类型的变量,而另一个函数的类型是不同的。


  2. 1# 不浪漫罪名 | 2019-08-31 10-32



    我找到了一些关于Pascal的信息

    阅读程序

    ,这表明不像C的

    getchar()

    ,它会自动正确填写各种类型。但这不是你要问的有趣的东西。



    杰克的编译器有一个

    GetChar()

    填写的程序

    Look

    变量;这是一个单字符的前瞻,虽然这些天通常隐藏在许多层包装纸下,但它在解析器中很常用。但杰克的所有方法都被告知了这个变量,这就是为什么他们首先检查它然后再调用它

    GetChar()

    当他们结束时再次,例如:




    1. { Get a number }
      function GetNum : integer;
      begin
      if not IsDigit(Look) then
      Expected(‘Integer’);
      GetNum := Ord(Look) - Ord(‘0’);
      GetChar;
      end;

    2. </code>


    请记住,在Pascal中,为函数名称赋值是指如何返回一个值,所以他在这里所说的是“我的前瞻字符是一个数字?如果是这样,解码它并返回它,然后读取一个新的超前字符,否则中止“。在本章的后面,他将扩展此定义以处理多个数字。杰克实际上在上一章中处理了空白,寻找

    SkipWhite

    在那里。


登录 后才能参与评论