JavaCC Tips

�ŋ߂́AXML�̕��y�ɂ���āA�p�[�T�[�W�F�l���[�^�̏o�Ԃ͂߂����菭�Ȃ��Ȃ�܂������A������Ƃ����Ǝ��`���t�@�C���̓ǂݎ���A�����̉��߂ɂ͂܂��܂����ɗ��ƒc�[���ł��B�����ł́A�������������������P�[�X��A�����炭���̐l�����ɗ��ƒ�����K���ɒԂ��Ă����܂��B���̕��ʂ̐��Ƃł͂Ȃ��̂ŊԈႢ�Ȃǂ���܂����炨�m�点�������B

JavaCC�H

�R���p�C���[�̂悤�ȁA���錈�܂����`���̃t�@�C����ǂ�ŁA����������v���O������������������c�[���B�R���p�C���[����邽�߂̃R���p�C���[�B�P����Ƃ����Ǎ��Ƒ�ςȁu�p�[�X����i����ǂ�ʼn��߂���j�v���O�����v������Ă����\�t�g�B<�i���������������B�j

�J�����F[email protected]

�C���X�g�[���ƊȒP�ȃ`���[�g���A���Ȃ�

JavaTip��SmartDoc�ŗL���Ȑ�C������y�[�W���Q�l�ɂȂ�܂��B

�����N�Ȃ�

JavaCC�̎g����
�L�p�ȃ��������肾������́uJava�o�������v�ɂ��A�C���X�g�[���ƃ`���[�g���A��
JavaCC�œ��{����������@
JavaHouse ML�ŗ��ꂽJavaCC�œ��{����������߂̕��@
JavaCC�A�\����̓c���[�A�����XQuery�̕��@ (1), (2)
developerWorks�̋L��
JavaCC Grammar Repository
SQL��JavaScript�Ȃǂ̂��낢��ȕ��@�������Ă���܂��B
The JacaCC FAQ
�p��ł����A�‚܂Â������ȃ|�C���g�����������Ă��܂��B

JavaCC�̎g���ǂ���

���Ўg���������

���̂悤�Ȏ��ɂ͎�y�Ƀv���O�������������Ƃ��o���܂��B

JavaCC���@������΁A�K���Ȑl��������݂����ł��B

�g���Ƌ�J������

�t�@�C���╶�����ǂ�ʼn��߂���v���O���������������Ƃ��ɁA���̂悤�ȃc�[�����g���킯�ł����A�������������Ɏ��̂悤�ȃP�[�X�ɂ͎g���Â炩�����肵�܂��B

�قȂ镶�@�����݂���ꍇ
JavaCC�ł͂��̂悤�ȁA�_��ȉ��߂����Â炢�ł��B
��ʂɂ���āA�قȂ�Ӗ������•�����P�ꂪ����ꍇ
��Ɠ����悤�ȃP�[�X�ł��B�Ⴆ�΁A�ЂƂ‚̃t�@�C���̒��ŁA�J���}�u,�v�𕶎��̋�؂�Ɏg������A�����̕�����Ƃ��Ĉ������肷��ꍇ�����̃P�[�X�Ɋ܂܂�܂��B�������A���@�����G�łȂ���Ή��Ƃ��Ȃ�܂��B
���{��̂悤�ɁA�P��̐؂�ڂ������łȂ��ꍇ
JavaCC�͉p��̂悤�ȕ��@�����肵�Ă���̂ŁA�󔒂Ȃǂŋ�؂��ĂȂ����@�͓���ł��B�������A������撣��Ή��Ƃ��ł��܂��B

���̌o����A�ȏ�̃P�[�X�Ɉ�v����ꍇ�́AJavaCC���g���ĕ��@���߂���̂ɑ�ϋ�J���܂��B��J���Ȃ����Ƃ�JavaCC�̑��݈Ӌ`���Ƃ���΁A�ʂ̕��@���l���邱�Ƃ�������������������������܂���B

Tips

�g�[�N���ɂ‚���

�܂�JavaCC���g����ł�邱�Ƃ́A�g�[�N���iToken�j�ƌĂ΂�镶�@�̍ŏ��v�f���`���邱�Ƃł��B�iJavaCC�ɂ���Đ������ꂽ���@���߃v���O�����́A���͂��ꂽ�������A���̃g�[�N���Ƃ����P�ʂɕ������Ă�����߂��n�߂܂��̂ŁA���ꂪ������Ύn�܂�܂���B�j

�g�[�N���ɂ͈ȉ���4��ނ���܂����A���ʂ͏��2�‚����ő��v�ł��B

SKIP
�����ʂ�A�������ēǂݔ�΂������́B�󔒁A�^�u�A���s�����ȂǁB
TOKEN
���K�\����A����TOKEN���g���Ē�`���镶�@�̍ŏ��P�ʁB
MORE
�g�[�N�����𒆂ɉ�����Ƃ�������ł���炵���B
SPECIAL_TOKEN
�R�����g���Ƃ��A���@�Ɋ֌W�����ǂ��ɂł������”\���̂������ȃg�[�N��

�g�[�N���̗�Ȃǂ�JavaCC�ɕt���̃T���v���ɂ�������t���Ă��܂��B��ώQ�l�ɂȂ�܂��B

���{�ꕶ����̕\���́H

JavaCC�̃T���v���ɂ���AJavaGrammar���Q�l�ɂ��āA

  < #LETTER: //���{����܂񂾕���
      [
       "\u0024",
       "\u0041"-"\u005a",
       "\u005f",
       "\u0061"-"\u007a",
       "\u00c0"-"\u00d6",
       "\u00d8"-"\u00f6",
       "\u00f8"-"\u00ff",
       "\u0100"-"\u1fff",
       "\u3040"-"\u318f",
       "\u3300"-"\u337f",
       "\u3400"-"\u3d2d",
       "\u4e00"-"\u9fff",
       "\uf900"-"\ufaff"
      ]
  >

���g���Ƃ��A���邢�͒P���ɁA

 < #NONASCII: ["\u0080"-"\ufaff"] >

���g���Ƃ���������邩�Ǝv���܂��B�Ȃ��A���{�����͂���ɂ́A��q�̍׍H���s���K�v������܂��B

���K�\���ŕ\���ł��Ȃ��g�[�N���̕���

���낢�날�邩�Ǝv���܂����A�����ł�TeX�̐����̗���o���܂��B

TeX�̐��������߂���ꍇ�A�uxy_123^45\beta�v�́u x | y | _ | 1 | 23 | ^ | 4 | 5 | \beta �v�ƕ���������@�����R�ł��B

�������A���ʂɕ��@���l����ƁA�uxy | _ | 123 | ^ | 45 | \beta�v�ƕ����������Ă��܂��A�S�R�Ӗ��̈Ⴄ���̂Ƃ��ĉ��߂���Ă��܂��܂��B ����ł͂ƁA�P��␔����1�����P�ʂŋ�؂��Ă��܂��ƁA�u12.34�v��A�u\text{this is a pen.}�v�Ȃǂ̕ʂ̌��Ŗ�肪�N���Ă��܂���ɁA�N��1�����P�ʂŕ��@���l����������܂���B

�������������ɂ́A�ux y_1 23^4 5\beta�v�̂悤�ɁA���͕�����̓K���Ȍ��ɋ󔒂����܂��B�‚܂�AJavaCC�ɂ�镶�@���߃v���O�����ɓ����O�ɁA���O�̃v���v���Z�b�T�ɂ��O�������s���Ƃ������Ƃł��B����͕��@���߂����ȒP�ł�����A������Ɗ撣��Ή������܂��B�������A���܂蕡�G�ȑO����������Ă��܂��ƁA���̂��߂�JavaCC��������܂��񂩂�AJavaCC�̍�ƂƂ̌��ˍ����ň�ԊȒP�ɂȂ�������‚��邱�Ƃ��d�v�ł��B

InputStream�ł͂Ȃ��āA�������ǂ܂�����

StringInputStream�Ȃ�N���X�����

�O�́AStringBufferInputStream�Ƃ����N���X���������̂ł����A���� Deprecated �Ȃ̂Ŏ����ō��܂��B�P�ɁAInputStream��StringReader�����b�v���邾���ł��B

public class StringInputStream extends InputStream {
    StringReader in;
    private StringInputStream() {}

    /** build input stream from given string.
     * @param source input stream source
     */
    public StringInputStream(String source) {
	in = new StringReader(source);
    }

    public int read() throws IOException { return in.read(); }
    
    public void close() throws IOException { in.close(); }

    public synchronized void mark(int readlimit) {
	try {
	    in.mark(readlimit);
	} catch(IOException e) {
	    throw new RuntimeException("IOException : StringInputStream["+
				       toString()+"]");
	}
    }
 
    public synchronized void reset() throws IOException { in.reset(); }
    public boolean markSupported() { return true; }
}

JavaCC�̕��@���߃N���X�̃R���X�g���N�^�ŁA�ȉ��̂悤�ɗ^����Γ����܂��B

    public MyParser(String in) throws ParseException {
	this(new StringInputStream(in));
    }

���{���ʂ�

JavaCC�͍ŏ��̃o�[�W����������{�ꂪ�ʂ�܂���ł����B�r���Ń��j�R�[�h�̓��͂�OK�ɂȂ����͂��ł����A�o�O�������Ă����������ɒ����Ă��܂���B���{���ʂ����@�Ƃ��āA�ȉ��̕��@������܂��B

�ǂ܂������t�@�C����native2ascii�Ȃǂ�ASCII������ɕϊ�����B
��́uJavaCC�œ��{����������@�v�ɂ���܂��B �������A����ϊ�����̂͑�ςł��B
JavaCC�̏o�̓\�[�X�Ƀp�b�`�𓖂Ă�B
�������́uJavaCC�œ��{����������@�v�ɂ���܂��B �����̃o�[�W�����ɓn���ăp�b�`�������邩�s���ł��B
�����œ��͌n�����B
���x�I�ɒx���A���͂�ϊ����Ă��܂��̂œ��͕������ۑ�����ĂȂ��� ����ꍇ�͎g���܂���B�ȉ��������܂��B

StringInputStream�ɉ��ǂ��{��

�ȉ��̂悤�ɁA�����R�[�h��128�ȏ�̕����́A���j�R�[�h�G�X�P�[�v�ɂ��Ă��܂��܂��B�������́uStringInputStream�v�N���X�ɓK���ɉ����ĕϊ����s�킹�܂��B

    public static String escape(String in) {
	StringBuffer buf = new StringBuffer();
	for (int i=0;i<in.length();i++) {
            int code = (int)in.charAt(i);
	    
	    if (code >= 128) {
		buf.append("\\u"+Integer.toHexString(code));
	    } else {
                buf.append(in.charAt(i));
            }
	}
	return buf.toString();
    }

JavaCC�\�[�X

�ȉ���2�‚̃X�C�b�`��ݒ肵�܂��B

    UNICODE_INPUT=false;
    JAVA_UNICODE_ESCAPE=true;

����ŁA���{��͎����I��ASCII�R�[�h�ɂ��G�X�P�[�v�ɒu��������ē��͂���܂��̂ŁA���{����܂񂾕��͂����߂ł��܂��B����͒x����������܂��񂪁A���O�̉��߃v���O�����������͂����Ǝ��Ԃ̒Z�k�ɂȂ�܂��B

�Ȃ��AJava�̃v���O�����ɂ‚��Ĉ�ʓI�Ɍ����邱�Ƃł����A�S�p�́u�`�v�Ȃǂ̕����̓��j�R�[�h�Ƃ̕ϊ��̉ߒ��ʼn�����”\��������܂��B

�܂Ƃ߂ăX�L�b�v����������������

SPECIAL_TOKEN ���g�����@������܂����A�����ł�JAVA_CODE���g���ăg�[�N���������Ŕ��f���ăX�L�b�v���Ă��܂��P�[�X�ɂ‚��Đ������܂��BTeX �̐����ł̃e�L�X�g�����̉��߂̗�������܂��B

�u\text{This is a pen.}�v�����߂��܂��B�����ł́u| \text | { | This is a pen. | } �v�Ɖ��߂������Ƃ��܂��B�u\text�v�����‚������_�Ŏ��̃��\�b�h���Ăт܂��B

JAVACODE 
String contents() 
{
    Token curTok = token;
    Token tok = getNextToken();  // ���̃g�[�N����ǂ�
    if (!(tok.kind == LBRACE)) { // LBRACE = "{"
	token = curTok;   // ���J�b�R�ł͂Ȃ�������
	return null;      // �g�[�N������‘O�ɖ߂��Ė߂�
    }
    int nesting = 1;
    StringBuffer content = new StringBuffer();
    while (true) {
        tok = getNextToken();
	if (tok == null) break;
	if (tok.kind == RBRACE) { // RBRACE = "}"
	    nesting--;
	    if (nesting == 0) {
		break;
	    }
	}
	if (tok.kind == LBRACE) {
	    nesting++;
	}
	content.append( tok.image ).append(' ');
                // �g�[�N���̐؂�ڂɋ󔒂�����
                // �i�����͊e�K�p��ʂɂ���čl����K�v������j
    }
    return content.toString().trim();
}

�A��l�Ƃ��āA�u{ }�v�ň͂܂ꂽ������������Ƃ��ċA���Ă��܂��B���������q�ɂȂ��Ă��Ă����v�ł��B�i���ꂪ������JAVA_CODE�̎g�������ǂ��������Ă��܂��񂪁E�E�E�j

return


�����j�F E-mail : [email protected]
Web page : http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/
Last modified: Fri Jan 09 12:05:49 2004