使用 Jison,如何扫描右移运算符和嵌套的泛型类型定义



我正在研究一种支持右移位运算符和泛型类型的语言的语法。例如:

function rectangle(): Pair<Tuple<Float, Float>> {
let x = 0 >> 2; 
}

我的问题是,在扫描过程中,正确的移位运算符被正确标记,但Pair<Tuple<Float, Float>>中的>>变成了单个>>标记,而不是两个单独的>标记(除非我添加一个空格(。这是因为我的 .jison 文件中有>之前的>>

">>"    { return '>>' }
">"     { return '>' }

有没有解决吉森问题的好方法?我觉得这是一个常见问题,因为我的语法与其他所有 C 风格的语言相似,但我还没有找到解决方案(除了编写一个手动分隔>的预扫描脚本(。

最简单的解决方案是不将>>识别为词法分析器中的单个标记。 相反,在解析器中,将两个连续的>标记识别为右移,然后检查以确保它们之间没有任何内容(没有空格或注释((如果有,则给出语法错误(。

最新更新