#P1372. FORCAL
FORCAL
本题没有可用的提交语言。
P1372. FORCAL
问题描述
FORCAL 是一种编程语言,对那些对编译器构造感兴趣,特别是参加 Dr. C. Ompiler 课程的学生来说非常熟悉。FORCAL 的语法定义如下:
-
唯一的数据类型是整数。
-
所有标识符都是隐式声明的,长度不超过 32 个字符。 标识符由字母、数字和下划线组成。标识符中至少有一个字符不是数字。
-
字面量是最多 8 位数字的字符串。
-
注释以
--
开头,并在该行的末尾结束。 -
语句类型包括:
-
赋值:
标识符 := 表达式
其中表达式由标识符、字面量、运算符
+
、-
和括号构成,规则如下:- 所有标识符和字面量都是表达式。
- 如果
a
和b
是表达式,则a + b
、a - b
、+a
、-a
和(a)
也是表达式。
-
输入/输出:
read(标识符列表); write(表达式列表);
列表中的项用逗号分隔。
-
-
begin
、end
、read
和write
是保留字。 -
每个语句以分号结束。
-
FORCAL 不区分大小写,例如
BegIN
和beGin
是相同的保留字。
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
如果需要进一步帮助,请告诉我!