我一直在研究另一种称为Stackgoat的基于堆栈的高尔夫语言。在这个挑战中,您将为Stackgoat(或实际上是任何通用的基于堆栈的语言)编写Tokenizer。
例子
"PPCG"23+
["PPCG", '23', '+']
'a "bc" +
['"a"', '"bc"', '+']
12 34+-"abc\"de'fg\\"
['12', '34', '+', '-', '"abc\"de'fg\\"']
"foo
['"foo"']
(empty input)
[]
' ""
['" "', '""']
规格
您需要处理的三种类型是:
- 弦乐,什么内
""
- 数字,任何数字序列
- 运算符,除空格外的任何其他单个字符
除非将其留在字符串中或将两个数字分隔开,否则实际上将忽略空格。
字符串/字符规范:
- 字符串以分隔
"
,当\
遇到时,下一个字符应转义。 - 字符前面加a
'
,后面的字符'
应转换为字符串文字。'a
->"a"
'
后面总会有一个角色- 右引号应自动插入
规则:
- 没有形式
eval
允许
输入输出:
- 可以通过STDIN,函数参数或您的语言等效输入。
- 输出应为数组或您的语言最接近的等效数组。
5
@Doorknob,认真吗?
—
LegionMammal978 '16
@ LegionMammal978是的,很认真。
—
Alex A.
可以输出到STDOUT吗?
—
门把手
@ZachGates是的,大多数语言也将\用作转义字符,因此,是的,如果您的语言显然需要它,则需要转义。
—
Downgoat
另外,在第一个示例中,结果的第一个元素应该是
—
基金莫妮卡的诉讼
'"PPCG"'
而不是just "PPCG"
吗?