diff --git a/P4D2_2017_Fall/vm/Vagrantfile b/P4D2_2017_Fall/vm/Vagrantfile index 5498b02..c8d4ec9 100644 --- a/P4D2_2017_Fall/vm/Vagrantfile +++ b/P4D2_2017_Fall/vm/Vagrantfile @@ -10,8 +10,9 @@ Vagrant.configure(2) do |config| end config.vm.synced_folder '.', '/vagrant', disabled: true config.vm.hostname = "p4" - config.vm.provision "file", source: "p4-logo.png", destination: "/home/vagrant/p4-logo.png" + config.vm.provision "file", source: "p4-logo.png", destination: "/home/vagrant/p4-logo.png" config.vm.provision "file", source: "p4_16-mode.el", destination: "/home/vagrant/p4_16-mode.el" + config.vm.provision "file", source: "p4.vim", destination: "/home/vagrant/p4.vim" config.vm.provision "shell", path: "root-bootstrap.sh" config.vm.provision "shell", privileged: false, path: "user-bootstrap.sh" end diff --git a/P4D2_2017_Fall/vm/p4.vim b/P4D2_2017_Fall/vm/p4.vim new file mode 100644 index 0000000..a62d815 --- /dev/null +++ b/P4D2_2017_Fall/vm/p4.vim @@ -0,0 +1,133 @@ +" Vim syntax file +" Language: P4_16 +" Maintainer: Antonin Bas, Barefoot Networks Inc +" Latest Revision: 5 August 2014 +" Updated By: Gyanesh Patra, Unicamp University +" Latest Revision: 12 April 2016 +" Updated Again By: Robert MacDavid, Princeton University +" Latest Revision: 12 June 2017 + +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" Use case sensitive matching of keywords +syn case match + +syn keyword p4ObjectKeyword action apply control default +syn keyword p4ObjectKeyword enum extern exit +syn keyword p4ObjectKeyword header header_union +syn keyword p4ObjectKeyword match_kind +syn keyword p4ObjectKeyword package parser +syn keyword p4ObjectKeyword state struct switch size +syn keyword p4ObjectKeyword table transition tuple typedef +syn keyword p4ObjectKeyword verify + +" Tables +syn keyword p4ObjectAttributeKeyword key actions default_action entries +syn keyword p4ObjectAttributeKeyword implementation +" Counters and meters +syn keyword p4ObjectAttributeKeyword counters meters +" Var Attributes +syn keyword p4ObjectKeyword const in out inout + + +syn keyword p4Annotation @name @tableonly @defaultonly +syn keyword p4Annotation @globalname @atomic @hidden + + +syn keyword p4MatchTypeKeyword exact ternary lpm range + +syn keyword p4TODO contained FIXME TODO +syn match p4Comment '\/\/.*' contains=p4TODO +syn region p4BlockComment start='\/\*' end='\*\/' contains=p4TODO keepend + +syn match p4Preprocessor '#(include|define|undef|if|ifdef) .*$' +syn match p4Preprocessor '#(if|ifdef|ifndef|elif|else) .*$' +syn match p4Preprocessor '#(endif|defined|line|file) .*$' +syn match p4Preprocessor '#(error|warning) .*$' + +syn keyword p4Type bit bool int varbit void error + +" Integer Literals + +syn match p4Int '[0-9][0-9_]*' +syn match p4Indentifier '[A-Za-z_][A-Za-z0-9_]*' +syn match p4HexadecimalInt '0[Xx][0-9a-fA-F]\+' +syn match p4DecimalInt '0[dD][0-9_]\+' +syn match p4OctalInt '0[oO][0-7_]\+' +syn match p4BinaryInt '0[bB][01_]\+' + + +syn region p4SizedType start='(bit|int|varbit)\<' end='\>' +syn match p4UserType '[A-Za-z_][A-Za-z0-9_]*[_][t]\W' +syn keyword p4Operators and or not &&& mask + + +" Header Methods +syn keyword p4Primitive isValid setValid setInvalid +" Table Methods +syn keyword p4Primitive hit action_run +" Packet_in methods +syn keyword p4Primitive extract lookahead advance length +" Packet_out methods +syn keyword p4Primitive emit +" Known parser states +syn keyword p4Primitive accept reject +" Misc +syn keyword p4Primitive NoAction + + +syn keyword p4Conditional if else select +syn keyword p4Statement return + +" Don't Care +syn keyword p4Constant _ +" Error +syn keyword p4Constant NoError PacketTooShort NoMatch StackOutOfBounds +syn keyword p4Constant OverwritingHeader HeaderTooShort ParserTiimeout +" Boolean +syn keyword p4Boolean false true + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Apply highlight groups to syntax groups defined above +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_p4_syntax_inits") + if version <= 508 + let did_p4_syntax_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink p4ObjectKeyword Repeat + HiLink p4UserType Type + HiLink p4ObjectAttributeKeyword Keyword + HiLink p4TypeAttribute StorageClass + HiLink p4Annotation Special + HiLink p4MatchTypeKeyword Keyword + HiLink p4TODO Todo + HiLink p4Comment Comment + HiLink p4BlockComment Comment + HiLink p4Preprocessor PreProc + HiLink p4SizedType Type + HiLink p4Type Type + HiLink p4DecimalInt Number + HiLink p4HexadecimalInt Number + HiLink p4OctalInt Number + HiLink p4BinaryInt Number + HiLink p4Int Number + HiLink p4Operators Operator + HiLink p4Primitive Function + HiLink p4Conditional Conditional + HiLink p4Statement Statement + HiLink p4Constant Constant + HiLink p4Boolean Boolean + + delcommand HiLink +endif + +let b:current_syntax = "p4" diff --git a/P4D2_2017_Fall/vm/user-bootstrap.sh b/P4D2_2017_Fall/vm/user-bootstrap.sh index 551e500..1e5cfa2 100644 --- a/P4D2_2017_Fall/vm/user-bootstrap.sh +++ b/P4D2_2017_Fall/vm/user-bootstrap.sh @@ -37,8 +37,6 @@ cd .. # Tutorials pip install crcmod git clone https://github.com/p4lang/tutorials -cd tutorials -cd .. sudo mv tutorials /home/p4 sudo chown -R p4:p4 /home/p4/tutorials @@ -47,3 +45,15 @@ sudo cp p4_16-mode.el /usr/share/emacs/site-lisp/ echo "(add-to-list 'auto-mode-alist '(\"\\.p4\\'\" . p4_16-mode))" | sudo tee /home/p4/.emacs sudo chown p4:p4 /home/p4/.emacs +# Vim +cd /home/vagrant +mkdir .vim +cd .vim +mkdir ftdetect +mkdir syntax +echo "au BufRead,BufNewFile *.p4 set filetype=p4" >> ftdetect/p4.vim +cp /home/vagrant/p4.vim syntax/p4.vim +cd /home/vagrant +sudo mv .vim /home/p4/.vim +sudo chown -R p4:p4 /home/p4/.vim +