📄 expandednescparser.g
字号:
public void setPreprocessingDirective(String pre)
{
preprocessorInfoChannel.addLineForTokenNumber( pre, new Integer(tokenNumber) );
}
protected Token makeToken(int t)
{
if ( t != Token.SKIP && countingTokens) {
tokenNumber++;
}
CToken tok = (CToken) super.makeToken(t);
tok.setLine(lineObject.line);
tok.setSource(lineObject.source);
tok.setTokenNumber(tokenNumber);
// System.out.println("Token #"+tok.getTokenNumber()+" at " + tok.getSource() + ":" + tok.getLine() + ":" + tok.getColumn());
for(int i=0; i<deferredLineCount; i++) {
newline();
}
// lineObject.line += deferredLineCount;
deferredLineCount = 0;
return tok;
}
public void deferredNewline() {
deferredLineCount++;
}
public void newline() {
super.newline();
lineObject.newline();
}
/*
// pop lexer on EOF
public void uponEOF() throws TokenStreamException, CharStreamException {
System.out.println("!!!!!!Found EOF "+lineObject.getSource());
try {
// don't allow EOF until main lexer. Force the
// selector to retry for another token.
System.out.println("!!!!!!Popping");
NesCParser.lexerSelector.pop(); // return to old lexer/stream
System.out.println("!!!!!!Popped. Retrying");
NesCParser.lexerSelector.retry();
System.out.println("!!!!!!Retry succeeded");
} catch (NoSuchElementException e) {
System.out.println("!!!!!!NoSuchElementException");
// return a real EOF if nothing in stack
}
}
*/
}
protected LineDirective {
boolean oldCountingTokens = countingTokens;
countingTokens = false;
}
:{
lineObject = new LineObject();
deferredLineCount = 0;
}
("line")? //this would be for if the directive started "#line", but not there for GNU directives
(Space)+
n:Number {
lineObject.setLine(Integer.parseInt(n.getText())-1);
}
(Space)+
( fn:StringLiteral { try {
lineObject.setSource(fn.getText().substring(1,fn.getText().length()-1));
}
catch (StringIndexOutOfBoundsException e) { /*not possible*/ }
}
| fi:ID { lineObject.setSource(fi.getText());
}
)?
(Space)*
("1" { lineObject.setEnteringFile(true); } )?
(Space)*
("2" { lineObject.setReturningToFile(true); } )?
(Space)*
("3" { lineObject.setSystemHeader(true); } )?
(Space)*
("4" { lineObject.setTreatAsC(true); } )?
(~('\r' | '\n'))*
("\r\n" | "\r" | "\n")
{
preprocessorInfoChannel.addLineForTokenNumber(new LineObject(lineObject), new Integer(tokenNumber));
countingTokens = oldCountingTokens;
newline();
// System.out.println("ColAtEnd="+getColumn());
}
;
BACKPTR :"<-";
Comment :{ LA(3) != '*' }?
( "/*"
( { LA(2) != '/' }? '*'
| "\r\n" { deferredNewline(); }
| ( '\r' | '\n' ) { deferredNewline(); }
| ~( '*'| '\r' | '\n' )
)*
"*/" { _ttype = Token.SKIP;
}
)
;
TinyDoc :"/**" { // System.out.println("LEXER: found start of TinyDoc comment");
}
( { LA(2) != '/' }? '*'
| "\r\n" { deferredNewline(); }
| ( '\r' | '\n' ) { deferredNewline(); }
| ~( '*'| '\r' | '\n' )
)*
"*/"
;
// inherited from grammar GnuCLexer
Whitespace :( ( ' ' | '\t' | '\014')
| "\r\n" { newline(); }
| ( '\n' | '\r' ) { newline(); }
) { _ttype = Token.SKIP; }
;
// inherited from grammar GnuCLexer
protected Escape :'\\'
( options{warnWhenFollowAmbig=false;}:
~('0'..'7' | 'x')
| ('0'..'3') ( options{warnWhenFollowAmbig=false;}: Digit )*
| ('4'..'7') ( options{warnWhenFollowAmbig=false;}: Digit )*
| 'x' ( options{warnWhenFollowAmbig=false;}: Digit | 'a'..'f' | 'A'..'F' )+
)
;
// inherited from grammar GnuCLexer
protected IntSuffix :'L'
| 'l'
| 'U'
| 'u'
| 'I'
| 'i'
| 'J'
| 'j'
;
// inherited from grammar GnuCLexer
protected NumberSuffix :IntSuffix
| 'F'
| 'f'
;
// inherited from grammar GnuCLexer
Number :( ( Digit )+ ( '.' | 'e' | 'E' ) )=> ( Digit )+
( '.' ( Digit )* ( Exponent )?
| Exponent
)
( NumberSuffix
)*
| ( "..." )=> "..." { _ttype = VARARGS; }
| '.' { _ttype = DOT; }
( ( Digit )+ ( Exponent )?
{ _ttype = Number; }
( NumberSuffix
)*
)?
| '0' ( '0'..'7' )*
( NumberSuffix
)*
| '1'..'9' ( Digit )*
( NumberSuffix
)*
| '0' ( 'x' | 'X' ) ( 'a'..'f' | 'A'..'F' | Digit )+
( IntSuffix
)*
;
// inherited from grammar GnuCLexer
IDMEAT :i:ID {
if ( i.getType() == LITERAL___extension__ ) {
$setType(Token.SKIP);
}
else {
$setType(i.getType());
}
}
;
// inherited from grammar GnuCLexer
protected ID
options {
testLiterals= true;
}
:( 'a'..'z' | 'A'..'Z' | '_' | '$')
( 'a'..'z' | 'A'..'Z' | '_' | '$' | '0'..'9' )*
;
// inherited from grammar GnuCLexer
WideCharLiteral :'L' CharLiteral
{ $setType(CharLiteral); }
;
// inherited from grammar GnuCLexer
WideStringLiteral :'L' StringLiteral
{ $setType(StringLiteral); }
;
// inherited from grammar GnuCLexer
StringLiteral :'"'
( ('\\' ~('\n'))=> Escape
| ( '\r' { newline(); }
| '\n' {
newline();
}
| '\\' '\n' {
newline();
}
)
| ~( '"' | '\r' | '\n' | '\\' )
)*
'"'
;
// inherited from grammar StdCLexer
protected Vocabulary :'\3'..'\377'
;
// inherited from grammar StdCLexer
ASSIGN :'=' ;
// inherited from grammar StdCLexer
COLON :':' ;
// inherited from grammar StdCLexer
COMMA :',' ;
// inherited from grammar StdCLexer
QUESTION :'?' ;
// inherited from grammar StdCLexer
SEMI :';' ;
// inherited from grammar StdCLexer
PTR :"->" ;
// inherited from grammar StdCLexer
protected DOT :;
// inherited from grammar StdCLexer
protected VARARGS :;
// inherited from grammar StdCLexer
LPAREN :'(' ;
// inherited from grammar StdCLexer
RPAREN :')' ;
// inherited from grammar StdCLexer
LBRACKET :'[' ;
// inherited from grammar StdCLexer
RBRACKET :']' ;
// inherited from grammar StdCLexer
LCURLY :'{' ;
// inherited from grammar StdCLexer
RCURLY :'}' ;
// inherited from grammar StdCLexer
EQUAL :"==" ;
// inherited from grammar StdCLexer
NOT_EQUAL :"!=" ;
// inherited from grammar StdCLexer
LTE :"<=" ;
// inherited from grammar StdCLexer
LT :"<" ;
// inherited from grammar StdCLexer
GTE :">=" ;
// inherited from grammar StdCLexer
GT :">" ;
// inherited from grammar StdCLexer
DIV :'/' ;
// inherited from grammar StdCLexer
DIV_ASSIGN :"/=" ;
// inherited from grammar StdCLexer
PLUS :'+' ;
// inherited from grammar StdCLexer
PLUS_ASSIGN :"+=" ;
// inherited from grammar StdCLexer
INC :"++" ;
// inherited from grammar StdCLexer
MINUS :'-' ;
// inherited from grammar StdCLexer
MINUS_ASSIGN :"-=" ;
// inherited from grammar StdCLexer
DEC :"--" ;
// inherited from grammar StdCLexer
STAR :'*' ;
// inherited from grammar StdCLexer
STAR_ASSIGN :"*=" ;
// inherited from grammar StdCLexer
MOD :'%' ;
// inherited from grammar StdCLexer
MOD_ASSIGN :"%=" ;
// inherited from grammar StdCLexer
RSHIFT :">>" ;
// inherited from grammar StdCLexer
RSHIFT_ASSIGN :">>=" ;
// inherited from grammar StdCLexer
LSHIFT :"<<" ;
// inherited from grammar StdCLexer
LSHIFT_ASSIGN :"<<=" ;
// inherited from grammar StdCLexer
LAND :"&&" ;
// inherited from grammar StdCLexer
LNOT :'!' ;
// inherited from grammar StdCLexer
LOR :"||" ;
// inherited from grammar StdCLexer
BAND :'&' ;
// inherited from grammar StdCLexer
BAND_ASSIGN :"&=" ;
// inherited from grammar StdCLexer
BNOT :'~' ;
// inherited from grammar StdCLexer
BOR :'|' ;
// inherited from grammar StdCLexer
BOR_ASSIGN :"|=" ;
// inherited from grammar StdCLexer
BXOR :'^' ;
// inherited from grammar StdCLexer
BXOR_ASSIGN :"^=" ;
// inherited from grammar StdCLexer
CPPComment :"//" ( ~('\n') )*
{
_ttype = Token.SKIP;
}
;
// inherited from grammar StdCLexer
PREPROC_DIRECTIVE
options {
paraphrase= "a line directive";
}
:'#'
( ( "line" || (( ' ' | '\t' | '\014')+ '0'..'9')) => LineDirective
| (~'\n')* { setPreprocessingDirective(getText()); }
)
{
_ttype = Token.SKIP;
}
;
// inherited from grammar StdCLexer
protected Space :( ' ' | '\t' | '\014')
;
// inherited from grammar StdCLexer
CharLiteral :'\'' ( Escape | ~( '\'' ) ) '\''
;
// inherited from grammar StdCLexer
protected BadStringLiteral :// Imaginary token.
;
// inherited from grammar StdCLexer
protected Digit :'0'..'9'
;
// inherited from grammar StdCLexer
protected LongSuffix :'l'
| 'L'
;
// inherited from grammar StdCLexer
protected UnsignedSuffix :'u'
| 'U'
;
// inherited from grammar StdCLexer
protected FloatSuffix :'f'
| 'F'
;
// inherited from grammar StdCLexer
protected Exponent :( 'e' | 'E' ) ( '+' | '-' )? ( Digit )+
;
// inherited from grammar StdCLexer
protected DoubleDoubleConst :;
// inherited from grammar StdCLexer
protected FloatDoubleConst :;
// inherited from grammar StdCLexer
protected LongDoubleConst :;
// inherited from grammar StdCLexer
protected IntOctalConst :;
// inherited from grammar StdCLexer
protected LongOctalConst :;
// inherited from grammar StdCLexer
protected UnsignedOctalConst :;
// inherited from grammar StdCLexer
protected IntIntConst :;
// inherited from grammar StdCLexer
protected LongIntConst :;
// inherited from grammar StdCLexer
protected UnsignedIntConst :;
// inherited from grammar StdCLexer
protected IntHexConst :;
// inherited from grammar StdCLexer
protected LongHexConst :;
// inherited from grammar StdCLexer
protected UnsignedHexConst :;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -