My favorites | Sign in
Project Logo
                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
* Copyright (c) 2008, Heng Yuan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the Heng Yuan nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY Heng Yuan ''AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL Heng Yuan BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.yuanheng.cookcc.input.javaap;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.yuanheng.cookcc.*;

/**
* @author Heng Yuan
* @version $Id$
*/
@CookCCOption (lexerTable = "ecs")
class FileHeaderScanner extends FileHeaderLexer
{
private StringBuffer m_buffer = new StringBuffer ();

@Shortcuts (shortcuts = {
@Shortcut (name = "ws", pattern = "[ \\t]")
})
@Lexs (patterns = {
@Lex (pattern = "{ws}+"),
@Lex (pattern = "\\n+")
})
protected void ignoreWhiteSpace ()
{
}

@Lex (pattern = "[/][/].*\\n")
protected void scanLineComment ()
{
m_buffer.append (yyText ().substring (2));
}

@Lex (pattern = "[/][*]+")
protected void startBlockComment ()
{
begin ("BLOCKCOMMENT");
}

@Lex (pattern = "^{ws}*[*]", state= "BLOCKCOMMENT")
protected void ignoreLeadingStar ()
{
}

@Lex (pattern = "{ws}*[*]+[/]", state = "BLOCKCOMMENT")
protected void endBlockComment ()
{
begin ("INITIAL");
}

@Lexs (patterns = {
@Lex (pattern = "{ws}+", state = "BLOCKCOMMENT"),
@Lex (pattern = "[^ \\t*/]+", state = "BLOCKCOMMENT"),
@Lex (pattern = ".", state = "BLOCKCOMMENT")
})
protected void scanBlockComment ()
{
m_buffer.append (yyText ());
}

@Lexs (patterns = {
@Lex (pattern = "^{ws}*[^ \\t]"),
@Lex (pattern = "."),
@Lex (pattern = "<<EOF>>"),
@Lex(pattern = "<<EOF>>", state = "BLOCKCOMMENT")
})
protected int doneScanning ()
{
return 0;
}

static String getFileHeader (File file) throws IOException
{
FileHeaderScanner scanner = new FileHeaderScanner ();
FileInputStream is = new FileInputStream (file);
scanner.setInput (is);
scanner.yyLex ();
is.close ();
return scanner.m_buffer.toString ();
}
}
Show details Hide details

Change log

r503 by superduperhengyuan on Nov 12, 2008   Diff
set the lexer table to ecs
Go to: 
Project members, sign in to write a code review

Older revisions

r498 by superduperhengyuan on Nov 09, 2008   Diff
change so that empty lines are
ignored.
r489 by superduperhengyuan on Nov 09, 2008   Diff
Add the capability to scan file header
and insert it.
All revisions of this file

File info

Size: 3364 bytes, 108 lines

File properties

svn:keywords
Id Revision
Hosted by Google Code