Antlr3: нет жизнеспособной альтернативы в характереJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Antlr3: нет жизнеспособной альтернативы в характере

Сообщение Anonymous »

У меня есть эта грамматика Antlr3: < /p>

Код: Выделить всё

grammar wft;

@header {
package com.mycompany.wftdiff.parser;

import com.mycompany.wftdiff.model.*;
}
@lexer::header {
package com.mycompany.wftdiff.parser;
}
@members {
private final WftFile wftFile = new WftFile();

public WftFile getParsingResult() {
return wftFile;
}
}
wftFile:
{
System.out.println("Heyo!");
}
(CommentLine | assignment | NewLine)*
itemTypeDefinition
EOF
;

/**
* ItemTypeDefinition
* DEFINE ITEM_TYPE
* END ITEM_TYPE
*/
itemTypeDefinition:
'DEFINE ITEM_TYPE' NewLine
(KeyName|TransStmt|BaseStmt|NewLine)+
WhiteSpace* 'DEFINE ITEM_ATTRIBUTE' NewLine
(KeyName|TransStmt|BaseStmt)*
WhiteSpace* 'END ITEM_ATTRIBUTE' NewLine
'END ITEM_TYPE'
;

/**
* KeyName
* KEY NAME VARCHAR2(8)
*/
KeyName: WhiteSpace* KeyNameStart .* {$channel = HIDDEN;} NewLine;
fragment KeyNameStart: 'KEY NAME VARCHAR2(';

/**
* TransStmt
* TRANS DISPLAY_NAME VARCHAR2(80)
*/
TransStmt: WhiteSpace* TransStmtStart .* {$channel = HIDDEN;} NewLine;
fragment TransStmtStart: 'TRANS';

/**
* BaseStmt
BASE PROTECT_LEVEL NUMBER
*/
BaseStmt: WhiteSpace* BaseStmtStart .* {$channel = HIDDEN;} NewLine;
fragment BaseStmtStart: 'BASE';

/**
* Assignment
*/
assignment returns [Assignment assignment]:
{
System.out.println("Assignment found!");
}
target=AssignmentTarget
WhiteSpace '=' WhiteSpace
value=String {
assignment = new Assignment(target.getText(), value.getText());
wftFile.addAssignment(new Assignment(target.getText(), value.getText()));
}
NewLine;

AssignmentTarget: A (A|D|'_')*;
String: '"' ~'"'* '"'
;

/**
* Comment
*/
CommentLine: CommentStart .* {$channel = HIDDEN;} NewLine;
fragment CommentStart: '#';

// Lexer rules

fragment D: '0'..'9';
fragment A: 'A'..'Z'
| 'a'..'z';
StringLength: D+;
NewLine   : '\r' '\n' | '\n' | '\r';
WhiteSpace: ' ';
< /code>
Затем я генерирую аналогичный анализатор, используя < /p>
java -cp "D:\wftdiff\lib\antlr-3.5.2\antlr-3.5.2-complete.jar" org.antlr.Tool -o src/com/mycompany/wftdiff/parser/ grammar-src/wft.g

... и назовите это так:

Код: Выделить всё

val lexer = wftLexer(ANTLRFileStream(fileName))
val parser = wftParser(CommonTokenStream(lexer))
parser.wftFile()
System.out.println("Test")
< /code>
fileName
указывает на текстовый файл со следующим содержанием:

Код: Выделить всё

# Oracle Workflow Process Definition
# $Header$

VERSION_MAJOR = "2"
VERSION_MINOR = "6"
LANGUAGE = "GERMAN"

ACCESS_LEVEL = "100"

DEFINE ITEM_TYPE
KEY NAME VARCHAR2(8)
TRANS DISPLAY_NAME VARCHAR2(80)
TRANS DESCRIPTION VARCHAR2(240)
BASE PROTECT_LEVEL NUMBER
BASE CUSTOM_LEVEL NUMBER
BASE WF_SELECTOR VARCHAR2(240)
BASE READ_ROLE REFERENCES ROLE
BASE WRITE_ROLE REFERENCES ROLE
BASE EXECUTE_ROLE REFERENCES ROLE
BASE PERSISTENCE_TYPE VARCHAR2(8)
BASE PERSISTENCE_DAYS NUMBER

DEFINE ITEM_ATTRIBUTE
KEY NAME VARCHAR2(30)
TRANS DISPLAY_NAME VARCHAR2(80)
TRANS DESCRIPTION VARCHAR2(240)
BASE PROTECT_LEVEL NUMBER
BASE CUSTOM_LEVEL NUMBER
BASE TYPE VARCHAR2(8)
BASE FORMAT VARCHAR2(240)
BASE VALUE_TYPE VARCHAR2(8)
BASE DEFAULT VARCHAR2(4000)
END ITEM_ATTRIBUTE
END ITEM_TYPE
< /code>
I get the following output:
Heyo!
Assignment found!
Assignment found!
Assignment found!
Assignment found!
test-data/partialSample01.wft line 25:2 no viable alternative at character 'D'
test-data/partialSample01.wft line 35:2 no viable alternative at character 'E'
Test
< /code>
How should I change my grammar in order to get rid of the no viable alternative at character 'D'
ошибка?
Обратите внимание, что мне не нужно анализировать этот раздел файла (меня не интересует эта конкретная информация; она появляется позже в файле).
Обновление 1
Я пытался проигнорировать все это, как предполагалось здесь (используя Skip () ), но он не помог. Файл: < /p>

Код: Выделить всё

grammar wft;

@header {
package com.mycompany.wftdiff.parser;

import com.mycompany.wftdiff.model.*;
}
@lexer::header {
package com.mycompany.wftdiff.parser;
}
@members {
private final WftFile wftFile = new WftFile();

public WftFile getParsingResult() {
return wftFile;
}
}
wftFile:
{
System.out.println("Heyo!");
}
(CommentLine | assignment | NewLine)*
itemTypeDefinition
EOF
;

/**
* ItemTypeDefinition
* DEFINE ITEM_TYPE
* END ITEM_TYPE
*/
itemTypeDefinition:
'DEFINE ITEM_TYPE' NewLine
(KeyName|TransStmt|BaseStmt|NewLine)+
WhiteSpace*
NewLine
DefineItemAttribute
WhiteSpace*
'END ITEM_TYPE'
;

DefineItemAttribute: 'DEFINE ITEM_ATTRIBUTE' .* 'END ITEM_ATTRIBUTE' {skip();};

/**
* KeyName
* KEY NAME VARCHAR2(8)
*/
KeyName: WhiteSpace* KeyNameStart .* {$channel = HIDDEN;} NewLine;
fragment KeyNameStart: 'KEY NAME VARCHAR2(';

/**
* TransStmt
* TRANS DISPLAY_NAME VARCHAR2(80)
*/
TransStmt: WhiteSpace* TransStmtStart .* {$channel = HIDDEN;} NewLine;
fragment TransStmtStart: 'TRANS';

/**
* BaseStmt
BASE PROTECT_LEVEL NUMBER
*/
BaseStmt: WhiteSpace* BaseStmtStart .* {$channel = HIDDEN;} NewLine;
fragment BaseStmtStart: 'BASE';

/**
* Assignment
*/
assignment returns [Assignment assignment]:
{
System.out.println("Assignment found!");
}
target=AssignmentTarget
WhiteSpace '=' WhiteSpace
value=String {
assignment = new Assignment(target.getText(), value.getText());
wftFile.addAssignment(new Assignment(target.getText(), value.getText()));
}
NewLine;

AssignmentTarget: A (A|D|'_')*;
String: '"' ~'"'* '"'
;

/**
* Comment
*/
CommentLine: CommentStart .* {$channel = HIDDEN;} NewLine;
fragment CommentStart: '#';

// Lexer rules

fragment D: '0'..'9';
fragment A: 'A'..'Z'
| 'a'..'z';
StringLength: D+;
NewLine   : '\r' '\n' | '\n' | '\r';
WhiteSpace: ' ';
< /code>
Parsing result:
Heyo!
Assignment found!
Assignment found!
Assignment found!
Assignment found!
test-data/partialSample01.wft line 25:2 no viable alternative at character 'D'
test-data/partialSample01.wft line 36:0 missing DefineItemAttribute at 'END ITEM_TYPE'
Test
< /code>
 Обновление 2 < /h2>
Остальные проблемы, которые я пытаюсь решить: < /p>

 Создать анализатор, который способен распознать все части этого файла, которые отмечены как актуальные в комментариях, который < /li>
< /ol>
. Все внутри начинается активность 
и конечная активность теги,
1.2. Все внутри начинания Activity_transition и End Activity_transition ,
1.3. Все внутри начинания process_activity и начинать trophy_activity теги.
by «распознавать все». Я имею в виду, что должен быть код ANTLR 3, который позволяет мне поставить операторы Java, которые будут обрабатывать данные, извлеченные из файла, как в правиле задания в исходном сообщении. I don't need answers to supply any Java code there, I will add that code later.
All parts which are not marked as relevant can be ignored by the parser (similar to the comments in the original grammar).

Your grammar must be compatible with ANTLR 3, Java 8, and Windows 7. «D: \ wftdiff \ lib \ antlr-3.5.2 \ antlr-3.5.2-complete.jar» org.antlr.tool -o src/com/mycompany/wftdiff/parser/grammarmar-src/wft.g или, если вы используете какие-либо специальные настройки, вам нужно указать их в своем ответе. Дело в том, что мне нужно иметь возможность воспроизвести ваш результат.>

Подробнее здесь: https://stackoverflow.com/questions/545 ... -character
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Используя DB2 SQL в JasperStudio 6.21.3, я не получаю жизнеспособной альтернативы при вводе $P!{msString}
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Нет жизнеспособной альтернативы на входе «SELECT*»
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • ANTLR4: нет жизнеспособной альтернативы при вводе «имя строки»
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • ANTLR4: нет жизнеспособной альтернативы при вводе «имя строки»
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • ANTLR4: нет жизнеспособной альтернативы при вводе «имя строки»
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»