我正在使用 antlr 2.7.4 创建词法分析器。我被困在以下情况:
如果冒号 (':') 后跟 C1 类中的字符,则应发出冒号令牌,后跟令牌 C1
如果冒号后面是字符类 C2 中的字符,则冒号应作为 C2 的一部分并应发出标记 C2。
假设 C1 类是 {1,2,3} 并且 C2 类是 {A,B,C} 那么 :13 应该标记为 COLON 后跟 C1。但是 :AB 应该被标记为 C2。
更具体地说,我有一种语言的语法,它有两种结构:
- Identifier : Type // 它有三个标记: IDENT COLON IDENT 。类似 Pascall 的类型注解
- :: // 这是一个标识符。有一类字符可以用作标识符。冒号可以用作标识符,前提是它与类的其他字符一起使用
一些例子:
- myvar : Int // IDENT 冒号 IDENT
- :: // 标识
- :$ // 标识
- &:& // 标识
一个后续问题:是否可以检查某个前瞻字符是否属于某个 Token 类?任何建议将不胜感激。
编辑
我想我是 antlrv2 的唯一用户。我很高兴在 antlrv3 中有一个解决方案,看看我是否可以在 antlrv2 中破解它。