Tôi đang sử dụng antlr 4 để viết ngữ pháp của mình. Tôi muốn thấy ba gui được tạo ra bởi ngữ pháp của tôi. Khi tôi cố gắng chạy ví dụ trên trang web antlr (http://www.antlr.org/wiki/display/ANTLR4/Getting+Started+with+ANTLR+v4) nó hoạt động, nhưng nếu tôi thử với ngữ pháp của tôi nó không hoạt động. Đặc biệt, tôi cũng đã thử chạy ngữ pháp trên NetBeans và AntlrWorks 2 với lệnh "Chạy trong TestRig ..", nhưng kết quả là cùng một thông báo lỗi "" Không thể tải Troubles dưới dạng lexer hoặc phân tích cú pháp "".antlr 4 Không thể tải dưới dạng lexer hoặc phân tích cú pháp
Đây là ngữ pháp của tôi:
script
: include*
systemDef
labelsDef
issueDef*
observationDef*
actionDef*
procedure*
;
include
: USE qualifiedName EOS;
systemDef
: SYSTEM definition;
labelsDef
: LABELS COLON '{' label* '}' EOS ;
label
: IDENTIFIER COLON literal EOS
;
issueDef
: ISSUES definition;
observationDef
: OBSERVATIONS definition;
actionDef
: ACTIONS definition;
definition
: IDENTIFIER? parameters? (COLON block)? EOS
;
reference
: IDENTIFIER? parameters? (COLON)? (atClause (COMMA atClause)*)? EOS
;
parameters
: '[' param (COMMA param)* ']'
;
param
: literal
| IDENTIFIER
;
literal
: STRINGLITERAL
| INTEGET_LITERAL
| PERCENTAGELITERAL
| FLOATLITERAL
| TRUE
| FALSE
;
block
: '{' ((marker)? (definition | reference))+ '}'
;
marker
: PLUS
| MINUS
| MULTIPLY
| SHARP
| QUESTION_MARK
;
atClause
: '@' qualifiedName parameters?
;
qualifiedName
: (DOT)? IDENTIFIER (DOT IDENTIFIER)*
;
procedure
: PROCEDURE IDENTIFIER params? COLON body
;
params
: '[' IDENTIFIER (COMMA IDENTIFIER)* ']'
;
body
: statement
| '{' statement* '}'
;
statement
: assignment
| expression // .str???
| callExpression
| ifStatement
| whileStatement
| repeatStatement
| forStatement
;
assignment
: qualifiedName ASSIGN expression (EOS)?
;
expression
: conditionalOrExpression (EOS)?;
conditionalOrExpression
: conditionalAndExpression (OR conditionalAndExpression)*
;
conditionalAndExpression
: equalityExpression (AND equalityExpression)*
;
equalityExpression
: stringExpression (equalityOp stringExpression)?
;
equalityOp
: EQUAL
| NE
;
stringExpression
: relationalExpression ('§' stringExpression)?
;
relationalExpression
: additiveExpression (relationalOp additiveExpression)*
;
relationalOp
: '<='
| '>='
| '<'
| '>'
;
additiveExpression
: multiplicativeExpression ((PLUS | MINUS) multiplicativeExpression)*
;
multiplicativeExpression
: unaryExpression ((MULTIPLY | DIVIDE) unaryExpression)*
;
unaryExpression
: (PLUS | MINUS | NOT)? basicExpression
;
basicExpression
: rangeExpression
| callExpression
| qualifiedName // .str >
| percentageExpression
| '(' expression ')'
| literal
;
percentageExpression
: PERCENTAGELITERAL 'of' additiveExpression
;
rangeExpression
: qualifiedName '(' ThreeDigits '..' ThreeDigits ')' (EOS)?
;
callExpression
: qualifiedName arguments (EOS)?
;
arguments
: '(' (expression (COMMA expression)*)? ')'
;
ifStatement // (ELSE body)?
: IF '(' expression ')' body
(ELSE ifStatement | body)?
;
whileStatement
: WHILE '(' expression ')' body
;
repeatStatement
: REPEAT body UNTIL '(' expression ')' EOS
;
forStatement
: FOR .qualifiedName ASSIGN value TO value STEP value body
;
value
: FLOATLITERAL
;
và đây là build.xml tập tin của tôi:
<target name="-pre-compile" depends="antlr">
</target>
<target name="init-antlr">
<!-- Full path to Antlr jar -->
<property name="antlr-4.0-complete.jar" location="C:/Users/Mary/Documents/TesiMagistrale/lib/antlr-4.0-complete.jar"/>
<!-- Grammar path -->
<property name="antlr.grammar" location="src/troubles/lang/Troubles.g4"/>
<!--<property name="antlr.lexer" location="src/trouble/lang/TroublesL.g4"/>-->
</target>
<target name="antlr" depends="init-antlr" unless="up-to-date">
<!-- Compiling grammar -->
<java classname="org.antlr.v4.Tool" fork="true">
<arg value="${antlr.grammar}"/>
<!--<arg value="${antlr.lexer}"/>-->
<arg value="-visitor"/>
<classpath path="${antlr-4.0-complete.jar}"/>
</java>
</target>
Nó sẽ rất hữu ích nếu bạn có thể bao gồm cả ngữ pháp của bạn, hoặc nếu nó khá dài, một [sscce] (http: // sscce.org) minh họa vấn đề. Điều này sẽ giúp người khác nhanh chóng chẩn đoán vấn đề hơn và thậm chí bạn có thể tự khám phá ra nó trong quá trình này. – ig0774