我正在研究支持右移运算符和泛型类型的语言的语法。例如:
tePred[1:50]
我的问题是,在扫描过程中,右移位运算符已正确标记,但function rectangle(): Pair<Tuple<Float, Float>> {
let x = 0 >> 2;
}
中的>>
成为单个Pair<Tuple<Float, Float>>
令牌,而不是两个单独的>>
令牌(除非我添加一个空格)。这是因为我的.jison文件中的>
之前有>>
:
>
在Jison有解决这个问题的好方法吗?我觉得这是一个常见问题,因为我的语法类似于其他所有C风格的语言,但我还没有找到解决方案(除了编写一个预扫描脚本,手动空格分隔{{ 1}} S)。
答案 0 :(得分:2)
最简单的解决方案是不要将>>
识别为词法分析器中的单个标记。相反,在你的解析器中,将两个连续的>
标记识别为右移,然后检查以确保它们之间没有任何内容(没有空格或注释)(并且如果存在则给出语法错误)