#P1372. FORCAL

FORCAL

本题没有可用的提交语言。

P1372. FORCAL


问题描述

FORCAL 是一种编程语言,对那些对编译器构造感兴趣,特别是参加 Dr. C. Ompiler 课程的学生来说非常熟悉。FORCAL 的语法定义如下:

  • 唯一的数据类型是整数。

  • 所有标识符都是隐式声明的,长度不超过 32 个字符。 标识符由字母、数字和下划线组成。标识符中至少有一个字符不是数字。

  • 字面量是最多 8 位数字的字符串。

  • 注释以 -- 开头,并在该行的末尾结束。

  • 语句类型包括:

    • 赋值:

      标识符 := 表达式
      

      其中表达式由标识符、字面量、运算符 +- 和括号构成,规则如下:

      1. 所有标识符和字面量都是表达式。
      2. 如果 ab 是表达式,则 a + ba - b+a-a(a) 也是表达式。
    • 输入/输出:

      read(标识符列表);
      write(表达式列表);
      

      列表中的项用逗号分隔。

  • beginendreadwrite 是保留字。

  • 每个语句以分号结束。

  • FORCAL 不区分大小写,例如 BegINbeGin 是相同的保留字。

FORCAL 词法单元(tokens)定义为:标识符、字面量、符号 +-():=;, 或保留字。

注意事项:

  • 赋值运算符 := 应被视为一个单独的 FORCAL 词法单元。
  • 词法单元之间允许有空格、制表符和换行符。
  • 注释的任何部分都不是词法单元。
  • 如果连续的词法单元是标识符、字面量或保留字,则它们之间必须用空格、制表符或换行符分隔。
  • 任何词法单元不允许包含空格、制表符或换行符。

帮助 Dr. C. Ompiler 的学生编写一个程序,该程序读取文本行并识别其中的 FORCAL 词法单元。


输入

输入由若干块组成。每块包含若干文本行,并以一个空行结束。


输出

输出由与输入块对应的若干块组成。每个块的各行依次存储程序识别出的 FORCAL 词法单元(每行一个词法单元)。每个词法单元必须以与输入文本中完全相同的形式输出。如果程序遇到一个既不是 FORCAL 词法单元,也不是注释、空格、制表符或换行符的字符串,则应在新行中输出字符串 TOKEN ERROR,然后继续处理输入中的下一个块。程序应在每个输出块后输出一个空行。


输入示例 1

A1:= A + (-B);

A123_A123 )
01.2 A B
C

:= A beGIn

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

输出示例 1

A1
:=
A
+
(
-
B
)
;

A123_A123
)
01
TOKEN ERROR

:=
A
beGIn

TOKEN ERROR

来源

Central Europe 1996


如果需要进一步帮助,请告诉我!