当前位置: 首页 > news >正文

jikuaiarc项目构建,参考arc,把arc一直到antlr4,生成g4文件

生成antlr4 的g4文件

grammar Arc;@header {
import java.util.List;
import java.util.ArrayList;
}program: form* EOF;form: literal| list_form| vector| quoted| quasiquoted| unquoted| unquote_splicing| symbol;list_form: '(' form* ')'| special_form;special_form: def_form| mac_form| fn_form| if_form| quote_form| quasiquote_form| assign_form| do_form| let_form| with_form| withs_form| when_form| unless_form| while_form| for_form| each_form| repeat_form| loop_form| afn_form| rfn_form| compose_form| complement_form| andf_form| orf_form| and_form| or_form;def_form: '(' DEF symbol form+ ')';
mac_form: '(' MAC symbol form+ ')';
fn_form: '(' FN form_list form+ ')';
if_form: '(' IF form form form? ')';
quote_form: '(' QUOTE form ')';
quasiquote_form: '(' QUASIQUOTE form ')';
assign_form: '(' ASSIGN symbol form ')';
do_form: '(' DO form* ')';
let_form: '(' LET symbol form form+ ')';
with_form: '(' WITH binding_list form+ ')';
withs_form: '(' WITHS binding_list form+ ')';
when_form: '(' WHEN form form+ ')';
unless_form: '(' UNLESS form form+ ')';
while_form: '(' WHILE form form+ ')';
for_form: '(' FOR symbol form form form+ ')';
each_form: '(' EACH symbol form form+ ')';
repeat_form: '(' REPEAT form form+ ')';
loop_form: '(' LOOP form form form form+ ')';
afn_form: '(' AFN form_list form+ ')';
rfn_form: '(' RFN symbol form_list form+ ')';
compose_form: '(' COMPOSE form+ ')';
complement_form: '(' COMPLEMENT form ')';
andf_form: '(' ANDF form+ ')';
orf_form: '(' ORF form+ ')';
and_form: '(' AND form+ ')';
or_form: '(' OR form+ ')';binding_list: '(' (symbol form)* ')';
form_list: '(' symbol* ')';literal: NUMBER| STRING| CHARACTER| BOOLEAN| NIL;vector: '[' form* ']';
quoted: '\'' form;
quasiquoted: '`' form;
unquoted: ',' form;
unquote_splicing: ',@' form;symbol: SYMBOL;// Lexer rules
NUMBER: '-'? [0-9]+ ('.' [0-9]+)? ([eE] [+-]? [0-9]+)?;
STRING: '"' (~["\\] | '\\' .)* '"';
CHARACTER: '#\\' .;
BOOLEAN: '#t' | '#f';
NIL: 'nil';SYMBOL: [a-zA-Z!$%&*+/:<=>?@^_~-] [a-zA-Z0-9!$%&*+/:<=>?@^_~-]*;// Special syntax symbols
DEF: 'def';
MAC: 'mac';
FN: 'fn';
IF: 'if';
QUOTE: 'quote';
QUASIQUOTE: 'quasiquote';
ASSIGN: 'assign';
DO: 'do';
LET: 'let';
WITH: 'with';
WITHS: 'withs';
WHEN: 'when';
UNLESS: 'unless';
WHILE: 'while';
FOR: 'for';
EACH: 'each';
REPEAT: 'repeat';
LOOP: 'loop';
AFN: 'afn';
RFN: 'rfn';
COMPOSE: 'compose';
COMPLEMENT: 'complement';
ANDF: 'andf';
ORF: 'orf';
AND: 'and';
OR: 'or';// Whitespace and comments
WS: [ \t\r\n]+ -> skip;
COMMENT: ';' ~[\r\n]* -> skip;// Special characters
LPAREN: '(';
RPAREN: ')';
LBRACK: '[';
RBRACK: ']';
QUOTE_CHAR: '\'';
BACKQUOTE: '`';
COMMA: ',';
COMMA_AT: ',@';

使用解析器

# 生成解析器
java -cp antlr-4.9.2-complete.jar org.antlr.v4.Tool -o .antlr Arc.g4# 编译
javac -cp antlr-4.9.2-complete.jar .antlr/*.java
javac -cp ".;.antlr;antlr-4.9.2-complete.jar" TestArc.java# 运行测试
java -cp ".;.antlr;antlr-4.9.2-complete.jar" TestArc

输出:

(TraeAI-3) G:\work\jikuaiarc [1:1] $ java -cp antlr-4.9.2-complete.jar org.antlr.v4.Tool -o .antlr Arc.g4
(TraeAI-3) G:\work\jikuaiarc [0:0] $ javac -cp antlr-4.9.2-complete.jar .antlr/*.java
(TraeAI-3) G:\work\jikuaiarc [0:0] $ javac -cp ".;.antlr;antlr-4.9.2-complete.jar" TestArc.java
(TraeAI-3) G:\work\jikuaiarc [0:0] $ java -cp ".;.antlr;antlr-4.9.2-complete.jar" TestArc
line 12:16 token recognition error at: '.'
Parse tree:
(program (form (list_form ( (form (symbol def)) (form (symbol factorial)) (form 
(list_form ( (form (symbol n)) ))) (form (list_form ( (form (symbol if)) (form (list_form ( (form (symbol <=)) (form (symbol n)) (form (literal 1)) ))) (form (literal 1)) (form (list_form ( (form (symbol *)) (form (symbol n)) (form (list_form ( (form (symbol factorial)) (form (list_form ( (form (symbol -)) (form (symbol n)) (form (literal 1)) ))) ))) ))) ))) ))) (form (list_form ( (form (symbol def)) (form (symbol fib)) (form (list_form ( (form (symbol n)) ))) (form (list_form ( (form (symbol if)) (form (list_form ( (form (symbol <)) (form (symbol n)) (form (literal 2)) ))) (form (symbol n)) (form (list_form ( (form (symbol +)) (form (list_form ( (form (symbol fib)) (form (list_form ( (form (symbol -)) (form (symbol n)) (form (literal 1)) ))) ))) (form (list_form ( (form (symbol fib)) (form (list_form ( (form (symbol -)) (form (symbol n)) (form (literal 2)) ))) ))) ))) ))) ))) (form (list_form ( (form (symbol mac)) (form (symbol when)) (form (list_form ( (form (symbol test)) (form (symbol body)) ))) (form (quasiquoted ` (form (list_form ( (form (symbol if)) (form (unquoted , (form (symbol test)))) (form (list_form ( (form (symbol do)) (form (unquote_splicing ,@ (form (symbol body)))) ))) ))))) ))) (form (list_form ( (form (symbol let)) (form (symbol x)) (form 
(literal 10)) (form (list_form ( (form (symbol when)) (form (list_form ( (form (symbol >)) (form (symbol x)) (form (literal 5)) ))) (form (list_form ( (form (symbol prn)) (form (literal "x is greater than 5")) ))) ))) ))) (form (list_form ( (form (symbol each)) (form (symbol x)) (form (quoted ' (form (list_form ( (form (literal 1)) (form (literal 2)) (form (literal 3)) (form (literal 4)) (form (literal 5)) ))))) (form (list_form ( (form (symbol prn)) (form (literal "Number: ")) (form (symbol x)) ))) ))) (form (list_form ( (form (symbol prn)) (form (literal "Factorial of 5: ")) (form (list_form ( (form (symbol factorial)) (form (literal 5)) ))) ))) (form (list_form ( (form (symbol prn)) (form (literal "Fibonacci of 10: ")) (form (list_form ( (form (symbol fib)) (form (literal 10)) ))) ))) <EOF>)Tokens:
LPAREN          '('
SYMBOL          'def'
SYMBOL          'factorial'
LPAREN          '('
SYMBOL          'n'
RPAREN          ')'
LPAREN          '('
SYMBOL          'if'
LPAREN          '('
SYMBOL          '<='
SYMBOL          'n'
NUMBER          '1'
RPAREN          ')'
NUMBER          '1'
LPAREN          '('
SYMBOL          '*'
SYMBOL          'n'
LPAREN          '('
SYMBOL          'factorial'
LPAREN          '('
SYMBOL          '-'
SYMBOL          'n'
NUMBER          '1'
RPAREN          ')'
RPAREN          ')'
RPAREN          ')'
RPAREN          ')'
RPAREN          ')'
LPAREN          '('
SYMBOL          'def'
SYMBOL          'fib'
LPAREN          '('
SYMBOL          'n'
RPAREN          ')'
LPAREN          '('
SYMBOL          'if'
LPAREN          '('
SYMBOL          '<'
SYMBOL          'n'
NUMBER          '2'
RPAREN          ')'
SYMBOL          'n'
LPAREN          '('
SYMBOL          '+'
LPAREN          '('
SYMBOL          'fib'
LPAREN          '('
SYMBOL          '-'
SYMBOL          'n'
NUMBER          '1'
RPAREN          ')'
RPAREN          ')'
LPAREN          '('
SYMBOL          'fib'
LPAREN          '('
SYMBOL          '-'
SYMBOL          'n'
NUMBER          '2'
RPAREN          ')'
RPAREN          ')'
RPAREN          ')'
RPAREN          ')'
RPAREN          ')'
LPAREN          '('
SYMBOL          'mac'
SYMBOL          'when'
LPAREN          '('
SYMBOL          'test'
SYMBOL          'body'
RPAREN          ')'
BACKQUOTE       '`'
LPAREN          '('
SYMBOL          'if'
COMMA           ','
SYMBOL          'test'
LPAREN          '('
SYMBOL          'do'
COMMA_AT        ',@'
SYMBOL          'body'
RPAREN          ')'
RPAREN          ')'
RPAREN          ')'
LPAREN          '('
SYMBOL          'let'
SYMBOL          'x'
NUMBER          '10'
LPAREN          '('
SYMBOL          'when'
LPAREN          '('
SYMBOL          '>'
SYMBOL          'x'
NUMBER          '5'
RPAREN          ')'
LPAREN          '('
SYMBOL          'prn'
STRING          '"x is greater than 5"'
RPAREN          ')'
RPAREN          ')'
RPAREN          ')'
LPAREN          '('
SYMBOL          'each'
SYMBOL          'x'
QUOTE_CHAR      '''
LPAREN          '('
NUMBER          '1'
NUMBER          '2'
NUMBER          '3'
NUMBER          '4'
NUMBER          '5'
RPAREN          ')'
LPAREN          '('
SYMBOL          'prn'
STRING          '"Number: "'
SYMBOL          'x'
RPAREN          ')'
RPAREN          ')'
LPAREN          '('
SYMBOL          'prn'
STRING          '"Factorial of 5: "'
LPAREN          '('
SYMBOL          'factorial'
NUMBER          '5'
RPAREN          ')'
RPAREN          ')'
LPAREN          '('
SYMBOL          'prn'
STRING          '"Fibonacci of 10: "'
LPAREN          '('
SYMBOL          'fib'
NUMBER          '10'
RPAREN          ')'
RPAREN          ')'
EOF             '<EOF>'

http://www.dtcms.com/a/398381.html

相关文章:

  • 白话讲讲GenAI、LLM、Agent、RAG、LangChain
  • (25.09)使用Livox-mid-360录制数据并运行Fast-lio2命令
  • 【图文】Codex接入Kimi K2/GLM-4.5 环境配置指南 (Windows/macOS/Ubuntu)
  • 异步 vs 同步:JavaScript中的速度与激情
  • Django模型与数据表的映射方式详解:不止Code First与Database First
  • LangChain4J-(7)-Function Calling
  • C程序设计-01程序设计和C语言
  • 为何上不了建设银行网站网络营销工程师前景
  • 设计模式的几个准则
  • python+nodejs+springboot在线车辆租赁信息管理信息可视化系统
  • 计算机毕业设计 基于Python的音乐推荐系统 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
  • 《人机分工重塑开发:遗留系统重构的AI实践指南》
  • 从0死磕全栈第十天:nest.js集成prisma完成CRUD
  • 网站开发做什么科目网页设计与网站建设连接数据库
  • 如何看网站是html几代做的加拿大pc网站搭建
  • C#的MVVM架构中的几种数据绑定方式
  • Jmeter接口测试:jmeter组件元件介绍,利用取样器中http发送请求
  • Apache Tomcat 部署与配置
  • 网站建设详细合同范本西部数码网站管理助手破解版
  • 权限提升专项训练靶场:hacksudo: L.P.E.
  • 工作笔记----lwip的数据管理结构pbuf源码解析
  • 生产环境实战:Spring Cloud Sleuth与Zipkin分布式链路追踪实践
  • 学习React-15-useImperativeHandle
  • 响应式网站案列小学生做电子小报的网站
  • 【AskAI系列课程】:P4.将AI助手集成到Astro网站前端
  • 自注意力机制(Self-Attention)简介
  • App 代上架全流程解析 iOS 应用代上架服务、苹果应用发布步骤、ipa 文件上传与 App Store 审核经验
  • 学习日报 20250921|MQ (Kafka)面试深度复盘
  • 趣味学Solana(启航)
  • 期权末日论效应怎么来的?