【发布时间】:2015-12-09 09:21:54
【问题描述】:
我想做的是编写一个程序,该程序接受文件输入或用户输入的字符串,并逐个字符地检查字符串中是否有空格或双/单引号,然后将其断开并制作一个单独的该单词的字符串。 我使用 Split 函数根据给定的分隔符拆分字符串中的单词。但是我的代码不适用于引号中的单词。 其实这个任务是和编译器构建课程有关的。
例如:
用户输入:sjhdfn"ff"fgfgfg".'\nff' 'f'
单词的输出应该是:
sjhdfn //ID
"ff"fgfgfg" //字符串
\n //字符=换行
ff //ID
'f' //字符
谁能帮助用双引号对输出的字符串部分进行编码?
【问题讨论】:
-
三个引号,中间的那些没有被屏蔽?我不认为这是一个有效的语法,如果是,
check character by character if space or double/single quotation come in string then break it是不够的。实际上,这种情况会产生歧义,如果没有额外的规则就无法处理 -
如果任务与编译器构建课程有关,我强烈建议您至少了解
Parse tree是什么。将不复杂的“代码”解析为它并不难,但它非常方便。 -
您好 Zloidooraque,感谢您的评论。不用担心语法,我只想以我在问题描述中提到的形式输出。我正处于 CC 的初始阶段,我不需要处理语义错误,我只需要在所需的 wordBreaker 进入字符串时打破每个单词。一旦双引号出现在字符串中,就用它打破前面的字符序列并组成一个单词,然后开始一个新单词,包括双引号打开和关闭关闭。无论介于两者之间,只需打印即可。
-
你可能猜到了,只有当双引号本身在引号
'"'内时,才允许使用奇数个双引号。你有三个 d.quotations。它是自动错误的。对于那些在双引号块之外(不属于单词)的引号,单引号数也必须是偶数。 -
如果保证输入字符串始终有效,任务很简单:trim() 输入字符串,查看第一个符号是否为 d.quotation,由 d.quotations 分割(带有保留选项
Split中打开了空子字符串),如果第一个符号是 d.quotation,则结果集合中的所有奇数项 (0,2,4..) 都是字符串,如果不是,所有偶数项都是字符串。在其中找到“\n”。用引号分割剩余的子字符串:使用与 d.quotations 相同的算法,你会发现chars。用space分割剩下的所有内容,你就有了IDs
标签: c# string compiler-construction