ANTLR:如果后面跟随某个特定字符,则不匹配

托马斯·S。

以下代码在V编程语言中完全有效

fn main() {
    a := 1.
    b := .1
    println("$a $b")
    
    for i in 0..10 {
        println(i)
    }
}

我想为这种文件的语法编写一个Lexer。1..1应匹配FloatNumber的片段,而..for-loop应该由一个标点符号规则相匹配。我的问题是我的FloatNumber实现已经匹配,0.并且.10从实现,0..10并且我不知道如何告诉它是否不匹配(如果.跟随)(或在它前面)。有点简化(不加下划线),我的语法如下所示:

fragment FloatNumber
    : ( Digit+   ('.' Digit*)?  ([eE]  [+-]?  Digit+)?
      | Digit*    '.' Digit+    ([eE]  [+-]?  Digit+)?
      )
    ;

fragment Digit
    : [0-9]
    ;
巴特·基尔斯

然后,您将不得不引入一个谓词,该谓词用于检查.与之类的float匹配时是否没有前方1.

以下规则:

Plus
 : '+'
 ;

FloatLiteral
 : Digit+ '.' {_input.LA(1) != '.'}?
 | Digit* '.' Digit+
 ;

Int
 : Digit+
 ;

Range
 : '..'
 ;

给定input "1.2 .3 4. 5 6..7 8.+9",将产生以下令牌:

FloatLiteral              `1.2`
FloatLiteral              `.3`
FloatLiteral              `4.`
Int                       `5`
Int                       `6`
Range                     `..`
Int                       `7`
FloatLiteral              `8.`
Plus                      `+`
Int                       `9`

谓词中的代码是特定于目标的。上面的({_input.LA(1) != '.'}?谓词适用于Java目标。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式:如果某个字符在引号内,则不匹配

来自分类Dev

如果javascript中存在字符,则不匹配

来自分类Dev

即使正则表达式说“如果同一字符在后面/在前面,则不匹配”,字符仍然匹配

来自分类Dev

正则表达式:如果包含特定字符串,则不匹配

来自分类Dev

如果组前的一个和/或两个字符包含特定文本,则不匹配

来自分类Dev

R strsplit:根据字符进行分割,除非后面跟随特定字符

来自分类Dev

替换特定字符,但如果位于()内则不替换

来自分类Dev

使用正则表达式匹配文本,但如果文本在某些字符内则不匹配

来自分类Dev

如果前一个匹配包含一个字符,则不匹配

来自分类Dev

如果字符在引号之间,则不匹配(AKA具有编程字符串模式)

来自分类Dev

有什么方法可以匹配模式,既可以在字符前面也可以后面跟某个字符?

来自分类Dev

正则表达式-如果组以javascript中的字符串开头,则不匹配

来自分类Dev

字符串替换所有正则表达式模式,如果嵌套则不匹配

来自分类Dev

正则表达式-如果结尾字符为“-”,则不匹配

来自分类Dev

匹配某个字符串(如果在某个字符串之后)

来自分类Dev

匹配某个字符串(如果在某个字符串之后)

来自分类Dev

查找目录,如果匹配则不递归

来自分类Dev

如果该字符后面的序列与模式不匹配,我如何在 Ruby 中指定我要匹配该字符?

来自分类Dev

正则表达式在引号之外匹配字符串,如果引号不完整,则不匹配任何内容

来自分类Dev

匹配点/句点(如果不跟在AND后面并加上单个字符)

来自分类Dev

正则表达式如果后面跟特定字符串则排除字符串

来自分类Dev

如果文件包含特定字符串,则不允许提交的SVN选项/插件

来自分类Dev

删除某个字符串之后的所有内容,但该字符串跟随另一个特定字符串

来自分类Dev

如何匹配某个模式的字符串但排除一个特定模式的字符串?

来自分类Dev

如果出现某个字符串,如何使JS RegEx不匹配?

来自分类Dev

如果出现某个字符串,如何使JS RegEx不匹配?

来自分类Dev

如果匹配的字符串超过某个值,则从 Pandas 数据框中删除行

来自分类Dev

如果字符串是单个字符,则替换该字符串,如果后面跟有另一个字符,则不替换该字符串

来自分类Dev

如果存在特定类别,则不添加类别

Related 相关文章

  1. 1

    正则表达式:如果某个字符在引号内,则不匹配

  2. 2

    如果javascript中存在字符,则不匹配

  3. 3

    即使正则表达式说“如果同一字符在后面/在前面,则不匹配”,字符仍然匹配

  4. 4

    正则表达式:如果包含特定字符串,则不匹配

  5. 5

    如果组前的一个和/或两个字符包含特定文本,则不匹配

  6. 6

    R strsplit:根据字符进行分割,除非后面跟随特定字符

  7. 7

    替换特定字符,但如果位于()内则不替换

  8. 8

    使用正则表达式匹配文本,但如果文本在某些字符内则不匹配

  9. 9

    如果前一个匹配包含一个字符,则不匹配

  10. 10

    如果字符在引号之间,则不匹配(AKA具有编程字符串模式)

  11. 11

    有什么方法可以匹配模式,既可以在字符前面也可以后面跟某个字符?

  12. 12

    正则表达式-如果组以javascript中的字符串开头,则不匹配

  13. 13

    字符串替换所有正则表达式模式,如果嵌套则不匹配

  14. 14

    正则表达式-如果结尾字符为“-”,则不匹配

  15. 15

    匹配某个字符串(如果在某个字符串之后)

  16. 16

    匹配某个字符串(如果在某个字符串之后)

  17. 17

    查找目录,如果匹配则不递归

  18. 18

    如果该字符后面的序列与模式不匹配,我如何在 Ruby 中指定我要匹配该字符?

  19. 19

    正则表达式在引号之外匹配字符串,如果引号不完整,则不匹配任何内容

  20. 20

    匹配点/句点(如果不跟在AND后面并加上单个字符)

  21. 21

    正则表达式如果后面跟特定字符串则排除字符串

  22. 22

    如果文件包含特定字符串,则不允许提交的SVN选项/插件

  23. 23

    删除某个字符串之后的所有内容,但该字符串跟随另一个特定字符串

  24. 24

    如何匹配某个模式的字符串但排除一个特定模式的字符串?

  25. 25

    如果出现某个字符串,如何使JS RegEx不匹配?

  26. 26

    如果出现某个字符串,如何使JS RegEx不匹配?

  27. 27

    如果匹配的字符串超过某个值,则从 Pandas 数据框中删除行

  28. 28

    如果字符串是单个字符,则替换该字符串,如果后面跟有另一个字符,则不替换该字符串

  29. 29

    如果存在特定类别,则不添加类别

热门标签

归档