�@�O����BNF�Ńv���O��������S1s���`���܂����B����́A���̒�`�ɏ]���ċL�q���ꂽ�v���O�������R���p�C������ɓ�����A�ŏ��Ɏ��s���鏈���ł����������ɂ��ĉ�������܂��B
�@�O��A�v���O���~���O����S1s�����̂悤�ɒ�`���܂����B
<program> ::= main '{' <expression> '}' <expression> ::= <term>{ <opeas> <term> } <term> ::= <factor>{ <opemd> <factor> } <factor> ::= <number>|( <expression> ) <number> ::= <digit>{<digit>} <opeas> ::= + | - <opemd> ::= * | / <digit> ::= 0|1|2|3|4|5|6|7|8|9
�@���̒�`����AS1s�̃v���O�������\�����镶��������܂��B��̓I�ɂ́A��������_�u���N�I�[�e�[�V�����}�[�N�u"�v�ň͂��ĕ\������ƁA"main"�A"{"�A"}"�A"("�A")"�A"+"�A"-"�A"*"�A"/"�A"0"�A"1"�A"2"�A"3"�A"4"�A"5"�A"6"�A"7"�A"8"�A"9"�A" "�ƂȂ�܂��B�Ō�̕�����͋ł��B�v���O�������R���p�C������ɓ������ẮA�ǂ�ȕ����A�ǂ����������ԂŋL�q����Ă���̂����d�v�ł��B
�@�L�q���ꂽ�\�[�X�R�[�h�����������ǂ����肷��ɓ������ẮA���������v���O�������\�����镶����͂ǂ��Ȃ��Ă��邩���m�F����K�v������܂��B
�@�Ⴆ�A"a"��"function"�Ƃ������������S1s�ł͎g���Ȃ�������ł�����A�g���Ȃ������o�Ă������_�Ńv���O�����ɂ̓G���[���܂܂�Ă���Ƃ������Ƃ�������܂��B
�@�R���p�C���ł́A�����������`�F�b�N�����₷�����邽�߂ɁA�����͂Ƃ����������ŏ��ɍs���܂��B�����̓v���O�����́A�\�[�X�R�[�h������̃��X�g�ƌ��Ȃ��āA���ꂩ���g�[�N���̃��X�g�i�g�[�N�����Ƃ������܂��j�����܂��B
�@�v���O���~���O����ɂ����������Ƃ́A���R����ɂ������P���ɑ���������̂ŁA�v���O�������ňӖ��̂��镶����̍ŏ��P�ʂƂȂ���̂ł��B�g�[�N���Ƃ́A���@��̍\���P�ʂŁA"123"�����l�ł����A"main"���\����ƂȂ�܂��B"("��")"�̂悤�Ȋ��ʂ��g�[�N���ł��B
�@�g�[�N���̃��X�g�����闝�R�́A������̔F���������ȒP�ɂȂ邩��ł��BJava�̕��@���Ƃ��čl���Ă݂܂��傤�B
long length = 256;
�@���̂悤�ȕ�������Ƃ��ɁA�擪����1��������"l"�A"o"�A�c�c�ƔF����������A�f�[�^�^�i"long"�j�A�ϐ����i"length"�j�A�����L���i"="�j�A���l�i"256"�j�A�Z�~�R�����i";"�j�̃g�[�N���ō\������郊�X�g�Ƃ��Ĉ���������������₷���͂��ł��B
�@�������ꂽ�g�[�N���̃��X�g�́A�����͂̎��Ɏ��s������\������ɂ����āA���@�I�ɐ������̂��`�F�b�N����܂��B�ȒP�ȗ�Ƃ��ẮAS1s�̃\�[�X�R�[�h�́A�ŏ���"main"�Ƃ���������n�܂��Ă���K�v������܂��B�ŏ���"makn"�ɂȂ��Ă�����A"msin"�ƂȂ��Ă�����A����̓G���[���Ƃ������ƂɂȂ�܂��B
�@�����͂����邽�߂ɂ́A�\�[�X�R�[�h���L�q���ꂽ�t�@�C�����J���ăv���O������1�������ǂޕK�v������܂��B�ł�����A�����͂̃v���O���������̂悤�ɍ쐬���Ă��悢�̂ł����A���ʂ����s���̌��������l���āA1�s���ǂݍ�����o�b�t�@�����O�����A��������1�������ǂݍ���ŏ��������܂��B
�@Java��1�s���ǂݍ��ނ��߂ɂ́Ajava.io.BufferedReader�N���X�̃C���X�^���X���Q�Ƃ���reader���g���āA���̂悤�ɋL�q���܂��B
String s = null; while ((s = reader.readLine()) != null) { current++; if (s.length() == 0) { continue; } else { // �g�[�N�����X�g�̍쐬 �i���j } }
�@�g�[�N���̃v���O���~���O��ł̕\���ɂ��ẮA���낢��ȕ��@������܂����A�����ł�Token�N���X��p�ӂ��邱�Ƃɂ��܂��傤�B���l���\��ꂩ�Ƃ����������t�B�[���htype�ŕێ����܂��Btype�̒l�����l�̏ꍇ�̓t�B�[���hn�ɒl�������A���̂ق��̏ꍇ�̓t�B�[���hs�ɒl�������܂��B
�@�܂��A���̃g�[�N�����o�������s�ԍ���lineNumber�ɕێ����A�g�[�N����lineNumber�s�̐擪���牽�Ԗڂ���J�n����̂����C���f�b�N�X��indexNumber�Ɏ����܂��B�Ȃ��A�K�v���A�N�Z�b�T���\�b�h�̂ݗp�ӂ��Ă����܂��B���ۂ̃v���O�����͎��̂悤�ɂȂ�܂��B
public class Token { private int type; private String s; private double n; private int lineNumber; private int indexNumber; public Token(int t, char c) { type = t; this.s = Character.toString(c); } public Token(int t, String s) { type = t; this.s = s; } public Token(int t, double n) { type = t; this.n = n; } public int getType() { return type; } public String getS() { return s; } public double getN() { return n; } public void setLineNumber(int n) { lineNumber = n; } public void setIndexNumber(int n) { indexNumber = n; } public int getLineNumber() { return lineNumber; } public int getIndexNumber() { return indexNumber; } }
�@����Token�N���X���g�p����ɓ������ẮA���̂悤��TokenUtil�N���X��p�ӂ��邱�Ƃɂ��܂��B���l�Ȃ̂��A�\���Ȃ̂��A�Ƃ������^�C�v�ɂ��ẮA���̃N���X�Ő錾���Ă����܂��B�ΏۋL����\���𑝂₷�ꍇ�ɂ́A���̃N���X�ɕύX�����邱�Ƃ������ƍl�������߂ł����A���̂�����̔��f�́A�����n���v���j��D�݂ɂ���ĕς���Ă��܂��B
�i���j public class TokenUtil { public static final int NUMBER = 1; public static final int OPE_AS = 2; // + - public static final int OPE_MD = 3; // * / public static final int L_PAREN = 4; // ( �i���j public static final int KEYWORD = 8; // �\��� public static final int IDENTIFIER = 9; // ���ʎq private static final String[] symbolsArray = { "+", "-", "*", "/", "(", ")", "{", "}", }; �i���j public static final List<String> symbols = Arrays.asList(symbolsArray); public static boolean isSymbols(String s) { return symbols.contains(s); } �i���j public static String toPrintFormat(Token t) { StringBuilder sb = new StringBuilder(); sb.append("\tline :" + t.getLineNumber() + "\n"); �i���j } return sb.toString(); }
�@�Ȃ��A����̐v�ł����ʎq�ɂ��Ă͍l���Ă��܂���ł������A�����͏����ł͂悭�o�Ă���͂��Ȃ̂ŁA����Ă���܂��B�v���O�����̔����ɂ͏����Ă���܂��A�\���̔���p�ɁAList<String>�^��keywords��p�ӂ��Ă���܂��B�܂��A������g���ċL������p��symbols�Ɠ��l�ȏ����Ŕ��肷�郁�\�b�hisKeywords���������Ă��܂��BtoPrintFormat���\�b�h�́AToken�N���X���I�u�W�F�N�g�����f�B�X�v���C�֕\�����镶������쐬������̂ł��B
Copyright © ITmedia, Inc. All Rights Reserved.