我们正在处理IBMEnterprise日语COBOL源代码。
准确描述 G 类型文字中允许的内容的规则,
标识符的允许范围尚不清楚。
IBM 手册指出 G'....' 文字
引号内的第一个字符必须为 SHIFT-OUT,
以及 SHIFT-IN 作为结束引号之前的最后一个字符。
我们的 COBOL 词法分析器“知道”这一点,但反对 G 文字
在真实代码中找到的。结论:IBM手册是错误的,
或者我们误读了它。客户不让我们看到代码,
所以诊断问题非常困难。
编辑:为了清楚起见,修改/扩展了以下文本:
有谁知道G文字形成的确切规则,
以及它们为何(不)符合 IBM 参考手册的内容?
理想的答案是 G 文字的正则表达式。
这就是我们现在使用的(由另一位作者编码,叹息):
#token non_numeric_literal_quote_g [STRING]
"<G><squote><ShiftOut> (
(<NotLineOrParagraphSeparatorNorShiftInNorShiftOut>|<squote><squote>|<ShiftOut>)
(<NotLineOrParagraphSeparator>|<squote><squote>)
| <ShiftIn> ( <NotLineOrParagraphSeparatorNorApostropheNorShiftInNorShiftOut>|
<ShiftIn>|<ShiftOut>)
| <squote><squote>
)* <ShiftIn><squote>"
其中 是另一个正则表达式的宏。想必他们
名称足够好,因此您可以猜出它们包含什么。
这里是IBM 企业 COBOL 参考 http://publib.boulder.ibm.com/infocenter/pdthelp/v1r1/topic/com.ibm.entcobol.doc_3.4/igy3lr31.pdf。
第 3 章“字符串”,第 32 页的小标题“DBCS 文字”是相关阅读。
我希望通过提供准确的参考,经验丰富的 IBM 员工可以告诉我们我们是如何误读的:-{ 我特别不清楚“DBCS 字符”一词的含义
当它说“一个或多个字符任一字节在 X'00...X'FF 范围内”
DBCS 字符怎么可能不是pairs8位字符代码?
如果您检查现有的 RE,它会匹配 3 种类型的字符对。
下面的一个答案表明 配对是错误的。
好吧,我可能相信这一点,但这意味着 RE 只会拒绝
包含单个 的文字字符串。我不相信那是
当我们似乎遇到了 G 文字的每个实例时,我们遇到了这个问题。
类似地,COBOL 标识符显然可以组成
带有 DBCS 字符。标识符到底允许什么?
同样,正则表达式是理想的选择。
EDIT2:我开始认为问题可能不在于 RE。
我们正在读取 Shift-JIS 编码的文本。我们的读者将其转换为
文本转换为 Unicode。但 DBCS 角色确实
不是 Shift-JIS;相反,它们是二进制编码的数据。可能
正在发生的事情是 DBCS 数据正在被转换
就像 Shift-JIS 一样,这会破坏该功能
将“两个字节”识别为 DBCS 元素。例如,
如果 DBCS 字符对是 :81 :1F,则 ShiftJIS 读取器
会将这一对转换为单个 Unicode 字符,
然后它的两字节性质就丢失了。如果你不会数数,
你找不到最后的报价。如果你找不到最后的引言,
你无法识别字面意思。那么问题就会出现
我们需要在中间切换输入编码模式
词法分析过程。哎呀。