final String SINGLE_CHAR = "(\\?|≡|∧|<|>|\\||=|,|\\.|;|:|\\(|\\)|\\{|\\}|∈|∪|∩|\\+|\\*|%|/|\\-)|"; 
final String DOUBLE_CHAR =  "([:<>!\\+\\*%\\-/]=|([/]\\*|[\\*]/)|\\+\\+|\\-\\-)|"; 
final String Variable = "([_a-zA-Z]+\\w*)";
final String Digit = "((\\d+\\.)?\\d+)|Φ";
以上是我在做词法分析时用到的正则表达式,请问除了这些以外的(比如说不合法的标识符等)可不可以用一个正则表示?或者把不匹配的也读出来呢
不然做词法分析的时候遇到非法的标识符时提示不了啊
多谢啦

解决方案 »

  1.   

    可以用replace或split间接的分离出来
      

  2.   

    没看懂你要做什么诶。PS 一下,第一个表达式可以改为这样,效率会好一些:final String SINGLE_CHAR = "[?≡∧<>|=,.;:(){}∈∪∩+*%/-]|";
      

  3.   

    谢谢楼上的,现在只能把变量,数字,标点,运算符读出来,我还想把不符合这些正则的情况也取出来放在一个数组里,做成词法的错误提示,REPLACE或SPLIT需要怎么弄啊
      

  4.   

    我要做的就是个词法分析程序,要读出标点/运算符,变量,数字,其中变量中就有关键字和合法的标识符啦,我现在就是一行一行的读,然后把分隔出来的符号和数字和变量存下来,我这里定义的合法标识符是以_字母开头的组合,
    数字开头的或者¥a,#j,@s这些乱七八糟的我想用个正则表达式ERROR匹配出来
      

  5.   

    出问题的地方
    0a;
    00a;
    @sd $d #sa 以数字开头的和@#¥等开头的这些非法标识符读不出来
    读出来以后是0,a,00,a,sd,d,sa
    而且非法情况太多也不能列举完,用正则表示实在头痛
      

  6.   

    弱弱的问一声
    你做的那玩意有没有全半角要求?比如    ?? shift+?     ^……shift+6      全半角有区别的
      

  7.   

    我觉得一个好的语言应该区分全半角的吧,不然输入中文字符不是不能识别错误了么?
    final String totalReg = Variable+DOUBLE_CHAR+SINGLE_CHAR+Digit+Error;
            
    while((line=buf.readLine())!=null){
    Pattern pattern=Pattern.compile(totalReg);
    Matcher matcher=pattern.matcher(line);...我是用这个匹配的,楼上你说的那种匹配不成功的情况我考虑过啊,不过好像没有可以用的pattern或matcher函数可以用
      

  8.   

    while(matcher.find())
    value.addElement(matcher.group());
      

  9.   

    搞什么???如果是除这些外,你可以用个ArrayList存取这些,然后循环match.
    如果都不匹配(list到了最后),就用个打出他们或把他们存起来不就ok?