使用 Jison,我如何扫描右移运算符和嵌套的泛型类型定义
With Jison, how do I scan right shift operator and nested generic type definitions
我正在研究支持右移运算符和泛型类型的语言的语法。例如:
function rectangle(): Pair<Tuple<Float, Float>> {
let x = 0 >> 2;
}
我的问题是,在扫描过程中,右移运算符被正确标记,但是 Pair<Tuple<Float, Float>>
中的 >>
变成了单个 >>
标记,而不是两个单独的 >
标记(除非我添加 space)。这是因为我的 .jison 文件中 >
之前有 >>
:
">>" { return '>>' }
">" { return '>' }
Jison有什么好的解决办法吗?我觉得这是一个常见问题,因为我的语法与其他所有 C 风格语言都相似,但我还没有找到解决方案(除了编写一个手动 space-delimits 的预扫描脚本>
s).
最简单的解决方案就是不将 >>
识别为词法分析器中的单个标记。相反,在您的解析器中,将两个连续的 >
标记识别为右移,然后检查以确保它们之间没有任何内容(没有空格或注释)(如果有则给出语法错误)。
我正在研究支持右移运算符和泛型类型的语言的语法。例如:
function rectangle(): Pair<Tuple<Float, Float>> {
let x = 0 >> 2;
}
我的问题是,在扫描过程中,右移运算符被正确标记,但是 Pair<Tuple<Float, Float>>
中的 >>
变成了单个 >>
标记,而不是两个单独的 >
标记(除非我添加 space)。这是因为我的 .jison 文件中 >
之前有 >>
:
">>" { return '>>' }
">" { return '>' }
Jison有什么好的解决办法吗?我觉得这是一个常见问题,因为我的语法与其他所有 C 风格语言都相似,但我还没有找到解决方案(除了编写一个手动 space-delimits 的预扫描脚本>
s).
最简单的解决方案就是不将 >>
识别为词法分析器中的单个标记。相反,在您的解析器中,将两个连续的 >
标记识别为右移,然后检查以确保它们之间没有任何内容(没有空格或注释)(如果有则给出语法错误)。